中介者模式:用一个中介对象来封装一系列的对象交互。

中介者使各对象不须要显式的相互引用,从而使其耦合松散。并且能够独立的改变它们之间的交互。

使用场合:中介者模式一般应用于一组对象以定义良好可是复杂的方式进行通信的场合。以及想定制一个分布在多个类中的行为,而不是想生成太多的子类的场合。

首先定义一个中介者接口IMediator

public interface IMediator {

    public void send(String message,Colleague colleague);
}

接着定义抽象同事类Colleague

public abstract class Colleague {

    protected IMediator mediator;

    public Colleague(IMediator mediator){
this.mediator=mediator;
}
}

接着定义详细的同事类继承Colleague 抽象同事类

public class ConcreteColleague1 extends Colleague{

    public ConcreteColleague1(IMediator mediator) {
super(mediator); } public void send(String message){
mediator.send(message, this);
} public void notify(String message){
System.out.println("同事1获得消息:"+message);
}
} public class ConcreteColleague2 extends Colleague{ public ConcreteColleague2(IMediator mediator) {
super(mediator); } public void send(String message){
mediator.send(message, this);
} public void notify(String message){
System.out.println("同事2获得消息:"+message);
}
}

然后定义一个详细的中介者对象ConcreteMediator继承IMediator

public class ConcreteMediator implements IMediator{

    private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2; public void setColleague1(ConcreteColleague1 colleague1){
this.colleague1=colleague1;
} public ConcreteColleague1 getColleague1(){
return colleague1;
} public void setColleague2(ConcreteColleague2 colleague2){
this.colleague2=colleague2;
} public ConcreteColleague2 getColleague2(){
return colleague2;
} @Override
public void send(String message, Colleague colleague) { if(colleague==colleague1){
colleague2.notify(message);
}
else{
colleague1.notify(message);
}
}
}

client代码

public static void main(String[] args) {
//中间者模式
ConcreteMediator mediator=new ConcreteMediator();
ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2=new ConcreteColleague2(mediator); mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2); colleague1.send("你好,中国");
colleague2.send("你好,美国");
}

最新文章

  1. tomcat解决加载JSP文件过大错误
  2. 解决libcurl7.50.3在windows XP SP3 VC++ 6.0下编译报错 unresolved external symbol __imp__IdnToAscii@20 unresolved external symbol __imp__IdnToUnicode@20
  3. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
  4. 苹果全新 Mac OS X 系统开放下载
  5. POJ1523 SPF[无向图割点]
  6. 第一节 SOA的基本概念和设计思想
  7. 1.5.6 Filters
  8. 关于float与double
  9. cf C. Xenia and Weights
  10. C51函数的递归调用
  11. Oracle EBS-SQL (BOM-11):检查无BOM的装配件.sql
  12. ntp升级
  13. hdoj 4325 Flowers 线段树+离散化
  14. PopupWindow 以及拍照、裁剪
  15. js 正则进阶regexp
  16. android + eclipse + 后台静默安装(一看就会)
  17. 基于spring-mybatis-data-common基架快速搭建web应用
  18. # 2017-2018-2 20155231《网络对抗技术》实验九: Web安全基础实践
  19. MT【193】三面角的正余弦定理
  20. git工具,conflict冲突解决方法

热门文章

  1. Proxifier安装与使用
  2. python--(常用模块-3-正则表达式)
  3. 页面关闭或刷新时触发javascript的事件
  4. Selenium:简单的尝试一下
  5. 【【henuacm2016级暑期训练】动态规划专题 I】Gargari and Permutations
  6. atitit。流程图的设计与制作 attilax 总结
  7. java mail邮件发送(带附件) 支持SSL
  8. 斯坦福新深度学习系统 NoScope:视频对象检测快1000倍
  9. gist.github.com
  10. ios各个屏幕