中介者模式
1、定义
用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。
2、结构图
- 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
- 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
- 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
3、代码
(1)同事抽象类
public abstract class Colleague { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public abstract void setNum(int num, AbstractMediator mediator); }
(2)同事A
public class ColleagueA extends Colleague{ @Override public void setNum(int num, AbstractMediator mediator) { super.setNum(num); mediator.AaffectB(); } }
(3)同事B
public class ColleagueB extends Colleague { @Override public void setNum(int num, AbstractMediator mediator) { super.setNum(num); mediator.BaffectA(); } }
(4)中介者抽象类
public AbstractMediator(Colleague colleagueA, Colleague colleagueB) { super(); this.colleagueA = colleagueA; this.colleagueB = colleagueB; } protected Colleague colleagueA; protected Colleague colleagueB; public abstract void AaffectB(); public abstract void BaffectA(); }
(5)中介者具体类
public class Mediator extends AbstractMediator { public Mediator(Colleague colleagueA, Colleague colleagueB) { super(colleagueA, colleagueB); } @Override public void AaffectB() { super.colleagueB.setNum(super.colleagueA.getNum()*100); } @Override public void BaffectA() { super.colleagueA.setNum(super.colleagueB.getNum()/100); } }
(5)客户端
public class Client { /** * @param args */ public static void main(String[] args) { Colleague colleagueA = new ColleagueA(); Colleague colleagueB = new ColleagueB(); AbstractMediator mediator = new Mediator(colleagueA, colleagueB); colleagueA.setNum(100, mediator); System.out.println("A num:"+colleagueA.getNum()); System.out.println("B num:"+colleagueB.getNum()); System.out.println("--------------------------"); colleagueB.setNum(100, mediator); System.out.println("A num:"+colleagueA.getNum()); System.out.println("B num:"+colleagueB.getNum()); } }
(6)运行结果
A num:100 B num:10000 -------------------------- A num:1 B num:100
4、总结
- 适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。
- 使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。
- 使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。
相关推荐
在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室、QQ群和短信平台,这些都是中介者模式在现实生活中的应用 1. 中介者模式的定义 从生活中的例子可以看出,不论是QQ游戏还是QQ群,它们都是充当一个...
1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD ...21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式
设计模式_源代码大全.zip 包括...中介者模式 22.享元模式 23.解释器模式 24.访问者模式 ... 相关资料:https://download.csdn.net/download/djk8888/11189309 和 https://download.csdn.net/download/djk8888/11189072
14.4 中介者模式的实际应用 14.5 最佳实践 第15章 命令模式 15.1 项目经理也难当 15.2 命令模式的定义 15.3 命令模式的应用 15.3.1 命令模式的优点 15.3.2 命令模式的缺点 15.3.3 命令模式的使用场景 15.4 命令模式...
中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
8. 中介者模式 9. 命令模式 10. 责任链模式 11. 装饰模式 12. 策略模式 13. 适配器模式 14. 迭代器模式 15. 组合模式 16. 观察者模式 17. 门面模式 18. 备忘录模式 19. 访问者模式 20. 状态模式 21. 解释器模式 22. ...
软件设计模式概述 ...32中介者模式 33迭代器模式 34访问者模式 35备忘录模式 36解释器模式 37UMLet的使用与类图的设计 38创建型模式应用实验 39结构型模式应用实验 40行为型模式应用实验 所有实验及实验报告及代码
1. 设计模式 2 1.1 创建型模式 3 1.1.1 工厂方法 ... 44 1.3.5 中介者模式 48 1.3.6 备忘录模式 51 1.3.7 观察者模式 53 1.3.8 状态模式 1.3.9 策略模式 1.3.10 模板方法 1.3.11 访问者模式
12第十二讲代理模式 13第十三讲外观模式 14第十四讲组合模式 15第十五讲桥接模式 16第十六讲适配器模式 17第十七讲解释器模式 18第十八讲中介者模式 19第十九讲职责链模式 20第二十讲迭代模式 21第二十一讲模板方法...
第21章_中介者模式.ppt 第22章_备忘录模式.ppt 第23章_观察者模式.ppt 第25章_策略模式.ppt 第2章_面向对象设计原则.ppt 第3章_设计模式概述.ppt 第4章_简单工厂模式.ppt 第5章_工厂方法模式.ppt 第6章_抽象工厂模式...
代码可以运行,下载这个后,建议买->《大话设计模式这本书》。...16、中介者模式 17、享元模式 18、解释器模式 19、访问者模式 20、策略模式 21、装饰模式 22、代理模式 23、工厂方法模式 24、原型模式
中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23...
18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State ...
├── 第21章_中介者模式.ppt ├── 第22章_备忘录模式.ppt ├── 第23章_观察者模式.ppt ├── 第24章_状态模式.ppt ├── 第25章_策略模式.ppt ├── 第26章_模板方法模式.ppt ├── 第27章_访问者模式.ppt...
18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...
4. **调停者模式(Mediator Pattern)**:调停者模式用于降低多个对象之间的耦合度,通过一个中介对象协调它们之间的通信。18.调停者模式Mediator展示了如何通过一个仲裁者类来处理对象间的交互,避免对象之间直接...
19. 中介者模式:用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 20. 备忘录模式:在不破坏封装性的前提下,捕获对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态。 21. 访问者...
行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...
第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template ...
20.3.1 中介者模式在聊天室系统中的应用 20.3.2 范例小结 第21章 备忘录模式(Memento) 21.1 模式解说 21.2 结构与用法 21.2.1 模式结构 21.2.2 代码模板 21.2.3 问题讨论 21.3 范例与实践 21.3.1 备忘录...