十七、中介者模式Mediator(行为型)
来源:互联网 发布:数据库的安全防护措施 编辑:程序博客网 时间:2024/06/10 06:21
中介对象可以封装一系列的对象交互,它可以使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在进行面向对象设计时,一般倾向于将系统分割成许多对象,这样可以增加复用性,但是这样做会导致对象的关系会非常复杂。中介者可以将这些集体行为封装起来,充当控制和协调这组对象交互的角色,从而使得这些对象之间不再有显式的相互引用,它们只知道中介者,从而减少了相互连接的数目。
中介者的优缺点很明显,例如它可以减少子类生成,降低各个Colleague之间的耦合度,简化对象协议,协作对象进行抽象,但是它使得控制集中,可能会导致Mediator难以维护。
在控制Colleague和Mediator之间的通信时,常用的方式有两种:一种是使用Observer模式,将Mediator实现为一个Observer,各个Colleague作为Subject,一旦状态改变就发通知给Mediator;另一种是在Mediator中定义一个特殊的通知接口,各个Colleague在通信时直接调用该接口。
public class Colleague {private Mediator mediator = null;public Colleague(Mediator mediator) {this.mediator = mediator;}public void changed() {mediator.doChange(this);}}public class ConcreteColleague1 extends Colleague{public ConcreteColleague1(Mediator mediator) {super(mediator);}public void doJob1(){System.out.println("Doing Job1...");}}public class ConcreteColleague2 extends Colleague {public ConcreteColleague2(Mediator mediator) {super(mediator);}public void doJob2() {System.out.println("Doing Job2...");}}public interface Mediator {public void initalState();public void doChange(Colleague colleague);public void show();}public class ConcreteMediator implements Mediator{private ConcreteColleague1 colleague1 = null;private ConcreteColleague2 colleague2 = null;@Overridepublic void initalState() {colleague1 = new ConcreteColleague1(this);colleague2 = new ConcreteColleague2(this);}@Overridepublic void doChange(Colleague colleague) {if(colleague == colleague1){colleague1.doJob1();System.out.println("Do other changes in mediator");} else if(colleague == colleague2){colleague2.doJob2();}}@Overridepublic void show() {colleague1.changed();colleague2.changed();}}public class Client {@Testpublic void test(){Mediator mediator = new ConcreteMediator();mediator.initalState();mediator.show();}}
客户端只需要调用Mediator中的方法就可以控制整个系统,Mediator可以将Colleague协调起来,而且每个Colleague的实现类中都包含了对Mediator的引用,这样,当Colleague自身改变时也可以将改变的消息传递给Mediator,从而让Mediator管理所有的Colleague。
这种模式的好处在于它可以将复杂性封装在Mediator内部,并且消除了Colleague之间的依赖关系,但是当Mediator中控制变化的方法复杂性增加时,就会导致许多问题,并抵消这种模式在其他方面带来的好处。
0 0
- 十七、中介者模式Mediator(行为型)
- 行为型-中介者模式(Mediator)
- 行为型模式-Mediator ( 中介者模式 )
- 中介者模式(Mediator)(对象行为型模式)
- 行为型模式-----中介者模式(Mediator)
- 设计模式--中介者模式Mediator(行为型)
- 六、中介者模式Mediator(行为型模式)
- 设计模式-行为型-中介者模式(Mediator)
- 行为型模式之中介者模式(Mediator)
- Mediator中介者(行为型设计模式)
- 行为型模式-中介者mediator
- 行为型模式之中介者MEDIATOR
- 行为型模式-中介者(mediator)
- 行为模式 - 中介者(Mediator)
- 行为模式: Mediator(中介者)
- 中介者(Mediator)----对象行为型模式
- 设计模式--行为型-Mediator(中介者)
- 3.5 Mediator(中介者) -- 对象行为型模式
- Python(Dict和Set类型)
- Sun JVM 年轻代和老年代垃圾回收都需要暂停JVM
- leetcode Strobogrammatic Number III
- ListView中item与控件抢夺焦点的那些事
- c#学习
- 十七、中介者模式Mediator(行为型)
- Leetcode 40. Combination Sum II (Medium) (cpp)
- IOS学习之核心动画-复制层
- LeetCode 69 Sqrt(x)
- 关于C51的IE(中断使能寄存器)的初级认识
- Java源码:ArrayList的实现原理
- 类文件结构
- Android如何判断时间是否在0到8点之间
- 【miscellaneous】GPRS本质论