设计模式之中介者模式
来源:互联网 发布:边境牧羊犬多聪明 知乎 编辑:程序博客网 时间:2024/06/05 15:31
设计模式之中介者模式
什么是中介者模式
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。
中介者模式又称为调停者模式,从类图中看,共分为3部分:
抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
为什么要使用中介者模式
一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下图中,有六个同事类,他们之间的关系太复杂,也就是说,同事类之间直接关联的设计是不好的。
当我们使用中介着模式就可以让中介着起到调节的作用,使结构简单。
中介者模式的核心:
如果一个系统中对象之间呈现为网状结构,对象之间存在大量的多对多的关系将导致关系及其复杂,这些对象我们称为同事对象
我们可以引入一个中介着对象,使各个同事只与中介着打交道,有原来的网状结构变为星型结构。
怎么用中介着模式
下面我们以开发部门和财务部门之间通过经理交互。
//中介者接口public interface Mediator { void register(String name, Depament de); void command(String name);//发出命令--通过名称去发}
//同事类的接口public interface Depament { void selfAction();// 做本部门的事情 void outaction(); // 向总经理发出申请}
import java.util.HashMap;public class President implements Mediator{ private HashMap<String,Depament> map = new HashMap<>(); @Override public void register(String name, Depament de) { map.put(name, de); } @Override public void command(String name) { map.get(name).selfAction(); }}
public class Development implements Depament{ private Mediator me;//中介着引用 public Development(Mediator me) { super(); this.me = me; me.register("Development",this); } @Override public void selfAction() { System.out.println("研发部门"); } @Override public void outaction() { System.out.println("需要资金"); me.command("Ficanial"); }}
//财务部public class Ficanial implements Depament { private Mediator me; public Ficanial(Mediator me) { super(); this.me = me; me.register("Ficanial", this); } @Override public void selfAction() { System.out.println("汇报工作,还有结余"); } @Override public void outaction() { System.out.println("给钱"); }}
public class Client { public static void main(String[] args) { Mediator m = new President(); Depament devp = new Development(m); devp.selfAction(); devp.outaction(); }}//研发部门//需要资金//数钱
什么时候用中介者模式
MVC模式中的C就是一个中介着对象。m和v相当于同事。
窗口游戏程序,窗口软件开发中窗口也是一个中介着对象。
图形界面开发中,多个组件之间的交互,可以通过引入中介着来解决。
- 设计模式之中介者
- 设计模式 之 中介者
- 设计模式之中介者
- 设计模式之Mediator中介者模式
- 设计模式之中介者模式
- 设计模式之中介者模式
- 八 设计模式之中介者模式
- 设计模式之--中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之-中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式
- 设计模式之中介者模式
- JAVA-设计模式之中介者模式
- 大话设计模式之中介者模式
- 20170414
- 子集生成
- NYOJ 325 &&NYOJ 456
- HDU1056 HangOver 水题
- 伸展树(转载)
- 设计模式之中介者模式
- 二叉树
- [贪心][DP][Ural 1203]Scientific Conference
- JavaWeb中路径问题
- NYOJ 306 走迷宫(DFS+二分法)
- actionresult的返回类型
- ubuntu14.04环境下安装配置OpenCV3.2+anaconda2(Python2.7)
- 深入浅出搜索架构引擎、方案与细节(上)
- NYOJ 304 节能(DP)