十八、中介者模式
2013-10-24 11:26
169 查看
中介者模式
中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦
合松散,而且可以独立的改变它们之间的交互。
该模式实现了控制集中化,把交互复杂性变为了中介者的复杂性,这就使得中介者会比任何一个关联对象都复
杂。
————摘自《大话设计模式》
基本结构:
①、抽象中介者,Mediator
群组各成员的业务处理方法 method(SuperObject ob,Object args...)
②、超类 SuperObject
抽象中介的引用
③、群组
子类1,继承超类 Object1
子类2,继承超类 Object2
……
④、具体中介 ConcreteMeaiator,继承抽象中介者
群组成员的引用:子类1的引用,子类2的引用……
覆写超类的 method(SuperObject ob,Object args...),
判断ob的具体“身份”(Object1?Object2?),调用其相应的方法
示例代码: 以同事间的相互通信为例
①、抽象中介者#########################################
②、超类#########################################
③、群组#########################################
④、具体中介#########################################
测试方法:
运行结果:
同事1收到消息:请问您是Duke吗?
同事2收到消息:周末去哪玩啊?
中介者模式很容易在系统中应用,也很容易在系统中误用。当系统中出现“多对多”交互复杂的对象群时,
不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。
中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦
合松散,而且可以独立的改变它们之间的交互。
该模式实现了控制集中化,把交互复杂性变为了中介者的复杂性,这就使得中介者会比任何一个关联对象都复
杂。
————摘自《大话设计模式》
基本结构:
①、抽象中介者,Mediator
群组各成员的业务处理方法 method(SuperObject ob,Object args...)
②、超类 SuperObject
抽象中介的引用
③、群组
子类1,继承超类 Object1
子类2,继承超类 Object2
……
④、具体中介 ConcreteMeaiator,继承抽象中介者
群组成员的引用:子类1的引用,子类2的引用……
覆写超类的 method(SuperObject ob,Object args...),
判断ob的具体“身份”(Object1?Object2?),调用其相应的方法
示例代码: 以同事间的相互通信为例
①、抽象中介者#########################################
/** * 抽象中介 */ public abstract class Mediator { public abstract void send(String message,Colleague colleague); }
②、超类#########################################
/** * 抽象同事 */ public abstract class Colleague { protected Mediator mediator; //中介的引用 public Colleague(Mediator mediator){ this.mediator = mediator; } }
③、群组#########################################
/** * 具体同事1 */ public class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator) { super(mediator); } public void notifySelf(String message){ //通知方法 System.out.println("同事1收到消息:"+message); } }
/** * 具体同事2 */ public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); } public void notifySelf(String message){ System.out.println("同事2收到消息:"+message); } }
④、具体中介#########################################
/** * 具体中介 */ public class ConcreteMediator extends Mediator { public ConcreteColleague1 colleague1; public ConcreteColleague2 colleague2; @Override public void send(String message, Colleague colleague) { //判断Colleague身份,调用相应的方法 if(colleague.getClass().getSimpleName().equals("ConcreteColleague1")){ ((ConcreteColleague1)colleague).notifySelf(message); }else{ ((ConcreteColleague2)colleague).notifySelf(message); } } }
测试方法:
public class Test { public static void main(String[] args) throws Exception{ Mediator mediator = new ConcreteMediator(); //中介 Colleague c1 = new ConcreteColleague1(mediator); //同事1,引入中介 Colleague c2 = new ConcreteColleague2(mediator); //同事2,引入中介 //消息传递 mediator.send("请问您是Duke吗?", c1); mediator.send("周末去哪玩啊?", c2); } }
运行结果:
同事1收到消息:请问您是Duke吗?
同事2收到消息:周末去哪玩啊?
中介者模式很容易在系统中应用,也很容易在系统中误用。当系统中出现“多对多”交互复杂的对象群时,
不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。
相关文章推荐
- 类对象Java设计模式之十八(中介者模式)
- 设计模式笔记十八:中介者模式
- 【设计模式学习笔记十八】【行为模式】【中介者模式(Mediator)】
- Java设计模式之十八(中介者模式)
- 设计模式学习笔记十八:中介者模式
- 设计模式讲解与代码实践(十八)——中介者
- 设计模式之十八------Mediator(中介者)
- 设计模式(十八) 中介者模式
- 设计模式十八:mediator(中介者模式)——对象行为型模式
- 读书笔记20:中介者模式
- 设计模式读书笔记-----中介者模式
- CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)
- 二十三种设计模式之行为型模式之中介者模式
- 设计模式读书笔记之中介者模式(mediator pattern)
- 中介者模式
- 中介者模式 MediatorPattern
- 设计模式-行为-中介者
- javascript设计模式(四) 职责链模式 中介者模式
- Java设计模式之中介者模式(调停者模式)
- 设计模式--中介者模式