博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java二十三设计模式之------中介者模式
阅读量:7116 次
发布时间:2019-06-28

本文共 1546 字,大约阅读时间需要 5 分钟。

一、中介者模式(Mediator)

中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。先看看图:

User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高,为了解耦,引入了Mediator类,提供统一接口,MyMediator为其实现类,里面持有User1和User2的实例,用来实现对User1和User2的控制。这样User1和User2两个对象相互独立,他们只需要保持好和Mediator之间的关系就行,剩下的全由MyMediator类来维护!基本实现:

  1. public interface Mediator {  
  2.     public void createMediator();  
  3.     public void workAll();  
  4. }  
 
  1. public class MyMediator implements Mediator {  
  2.   
  3.     private User user1;  
  4.     private User user2;  
  5.       
  6.     public User getUser1() {  
  7.         return user1;  
  8.     }  
  9.   
  10.     public User getUser2() {  
  11.         return user2;  
  12.     }  
  13.   
  14.     @Override  
  15.     public void createMediator() {  
  16.         user1 = new User1(this);  
  17.         user2 = new User2(this);  
  18.     }  
  19.   
  20.     @Override  
  21.     public void workAll() {  
  22.         user1.work();  
  23.         user2.work();  
  24.     }  
  25. }  
 
  1. public abstract class User {  
  2.       
  3.     private Mediator mediator;  
  4.       
  5.     public Mediator getMediator(){  
  6.         return mediator;  
  7.     }  
  8.       
  9.     public User(Mediator mediator) {  
  10.         this.mediator = mediator;  
  11.     }  
  12.   
  13.     public abstract void work();  
  14. }  
 
  1. public class User1 extends User {  
  2.   
  3.     public User1(Mediator mediator){  
  4.         super(mediator);  
  5.     }  
  6.       
  7.     @Override  
  8.     public void work() {  
  9.         System.out.println("user1 exe!");  
  10.     }  
  11. }  
 
  1. public class User2 extends User {  
  2.   
  3.     public User2(Mediator mediator){  
  4.         super(mediator);  
  5.     }  
  6.       
  7.     @Override  
  8.     public void work() {  
  9.         System.out.println("user2 exe!");  
  10.     }  
  11. }  

测试类:

 

 

 

 

 
  1. public class Test {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Mediator mediator = new MyMediator();  
  5.         mediator.createMediator();  
  6.         mediator.workAll();  
  7.     }  
  8. }  

输出:

user1 exe!

user2 exe!

转载自 

转载于:https://www.cnblogs.com/wuxinyiwu/p/8439184.html

你可能感兴趣的文章
UC:我们是怎么做出 Chromium M35 内核浏览器
查看>>
《Windows 8 权威指南》——1.3 引入全新内核休眠模式,实现“瞬间开机”
查看>>
《Linux KVM虚拟化架构实战指南》——第1章 KVM虚拟化概述 1.1XEN虚拟化介绍
查看>>
斯诺登最新爆料:QQ和飞信也被美国国家安全局监控
查看>>
Android各版本最新份额:果冻豆达62% 仍居首位
查看>>
PgSQL · 最佳实践 · 从 MaxCompute (ODPS) 迁移数据到 HybridDB
查看>>
《iOS 6高级开发手册(第4版)》——2.5节秘诀:Quick Look预览控制器
查看>>
每日Ubuntu小技巧 - 在Ubuntu上面安装VMware Workstation
查看>>
《写给PHP开发者的Node.js学习指南》一2.2 预定义的PHP变量
查看>>
Linux下常用文本处理命令
查看>>
《Spring 5 官方文档》5. 验证、数据绑定和类型转换(二)
查看>>
《像计算机科学家一样思考Python(第2版)》——2.7 注释
查看>>
域名行业将带来高达98亿美元的巨大商机
查看>>
《HTML5+JavaScript动画基础》——2.4 JavaScript对象
查看>>
《JavaScript面向对象精要》——1.2 原始类型
查看>>
《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.7 技巧:指定过渡动画
查看>>
5 个最受人喜爱的开源 Django 包
查看>>
安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(四)
查看>>
为什么 Cloudera 要创建 Hadoop 安全组件 Sentry ?
查看>>
数学之美:两点之间最快的路径
查看>>