设计模式读书笔记之中介者模式(mediator pattern)
2010-04-05 23:01
441 查看
中介者模式:用一个中介对象来分装一系列对象的交互。中介者模式使得各个对象之间不需要直接打交道,从而使他们松散耦合。可以独立的改变他们之间的交互。
如果你第一次接触中介者模式,你一定从上图看不出他的作用来。下图更能说明问题, 中介者模式就是要把左边的结构变成右边的结构:
现实中一个更恰当的例子就是联合国,如果没有联合国,则各国之间的关系如下图的左边,在有联合国之后,国与国之间的争执可通过联合国来处理。
基础代码:
优点:把中介者作为一个独立的概念,可使对象之间的关系转为对象和中介者之间的关系, 可站在一个宏观的角度看问题。
缺点:中介者集中控制关系,使得中介者变得复杂。
如果你第一次接触中介者模式,你一定从上图看不出他的作用来。下图更能说明问题, 中介者模式就是要把左边的结构变成右边的结构:
现实中一个更恰当的例子就是联合国,如果没有联合国,则各国之间的关系如下图的左边,在有联合国之后,国与国之间的争执可通过联合国来处理。
基础代码:
// package designpattern.mediator; public interface Mediator { public void send(String msg, Colleague c); } // package designpattern.mediator; abstract public class Colleague { protected Mediator mediator; public Colleague(Mediator m){ this.mediator = m; } public abstract void send(String msg); public abstract void readMsg(String msg); } // package designpattern.mediator; public class ConcreteMediator implements Mediator { private ConcreteColleague1 colleague1; private ConcreteColleague2 colleague2; public void setColleague1(ConcreteColleague1 colleague1) { this.colleague1 = colleague1; } public void setColleague2(ConcreteColleague2 colleague2) { this.colleague2 = colleague2; } public void send(String msg, Colleague c) { if(c==colleague1){ colleague2.readMsg(msg); } else{ colleague1.readMsg(msg); } } } // package designpattern.mediator; public class ConcreteColleague1 extends Colleague{ public ConcreteColleague1(Mediator m) { super(m); } public void send(String msg){ System.out.println("Colleague1 sends msg: " + msg); mediator.send(msg, this); } public void readMsg(String msg){ System.out.println("Colleague1 get msg: " + msg); } } // package designpattern.mediator; public class ConcreteColleague2 extends Colleague{ public ConcreteColleague2(Mediator m) { super(m); } public void send(String msg){ System.out.println("Colleague2 sends msg: " + msg); mediator.send(msg, this); } public void readMsg(String msg){ System.out.println("Colleague2 gets msg: " + msg); } } //测试用例 package designpattern.mediator; public class Test { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ConcreteColleague1 c1 = new ConcreteColleague1(mediator); ConcreteColleague2 c2 = new ConcreteColleague2(mediator); mediator.setColleague1(c1); mediator.setColleague2(c2); c1.send("吃了吗?"); c2.send("没有, 你要请客吗?"); } }
优点:把中介者作为一个独立的概念,可使对象之间的关系转为对象和中介者之间的关系, 可站在一个宏观的角度看问题。
缺点:中介者集中控制关系,使得中介者变得复杂。
相关文章推荐
- Java设计模式十二: 中介者模式(Mediator Pattern)
- Mediator Pattern --中介者模式原理及实现(C++)
- 设计模式------中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern)
- Net设计模式实例之中介者模式(Mediator Pattern)(1) 推荐
- 23种设计模式-10.中介者模式(Mediator Pattern)
- C#设计模式——中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern)
- 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
- 调停者模式(Mediator Pattern,对象行为型模式,中介者模式)
- 中介者模式(Mediator Pattern)
- 设计模式系列5-----C++实现中介者模式(Mediator Pattern)
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 设计模式(18)——中介者模式(Mediator Pattern)
- 极速理解设计模式系列:15.中介者模式(Mediator Pattern)
- 中介者模式(Mediator pattern)
- Mediator Pattern(中介者模式)
- 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
- 设计模式(十六)-中介者模式(Mediator Pattern)——只有一个仲裁者