基于设计模式的学习之旅-----中介者(附源码)
基于设计模式的学习之旅-----中介者
1、初识中介者
那些年,我们一起上过的大学,班级里有班长,有团书记。想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上两个同学之间也可惜沟通啊,沟通一下,院里哪个女生,哪个帅哥呀~~~如果没有QQ的话,大概就是下面的情景:
哎呀呀,看看这个乱那。如果同学的数目多起来就会变成网状的结构啦。原本把一个系统分割成一些对象是可以增强复用性的,但是现在的情况是,这些兑现之间存在着大量的联系,耦合性极高。这是很不利于复用的,同时这种情况使得系统的灵活性大大的降低,使得对系统的扩展很难,要是新转来一个学生的话,要改动的地方就多了去了。
如果现在可以使用QQ,那么可以采用另一种方式设计这个系统呢,比如做成星形的结构:
看看这种“星形结构”和“网状结构”的区别吧,显然采用星形结构就可以避免上面的网状结构存在的问题了,实际上这里的QQ就是指的是中介,这样一来每个学生对象就不用存在耦合了,同学之间需要交流可以通过一个QQ群。
2、什么是中介者
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从
而使其耦合松散,而且可以独立地改变它们之间的交互。
3、模式结构图
4、模式代码事例
场景:新年快到了,公司要给每位员工送年货。当然,公司不可能直接消耗人力资源自己往每个员工家里送物品,所以收集了每个员工的一些信息,通过快递公司为其送出物品。
4、1涉及到的类,以及类图
ExpressMediator(抽象的中介者)、EMSExpressMediator(具体的中介者EMS快递)、Colleage(抽象的同事类)、Company(具体的同事类公司)、Person(具体的同事类员工)
4、2具体的代码实现
ExpressMediator(抽象的中介者)
EMSExpressMediator(具体的中介者EMS快递)
Colleage(抽象的同事类)
Company(具体的同事类公司)
Person(具体的同事类员工)
4、3事例输出结果
5、模式参与者
中介者(Mediator,如:ExpressMediator)
具体中介者(ConcreteMediator,如EMSExpressMediator)
同事类(Colleague,如Company、Person)
6、模式优缺点
A、减少了子类生成
B、它将各C o l l e a g u e解耦
C、它简化了对象协议
D、它对对象如何协作进行了抽象
E、它使控制集中化
7、模式适用性
A、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理
B、一个对象引用其他很多对象并且直接与这些对象通信 ,导致难以复用该对象
C、想定制一个分布在多个类中的行为,而又不想生成太多的子类
点击下载“文档以及源码下载”
欢迎转载,请注明出处“http://www.cnblogs.com/luxiaofeng54/archive/2013/04/09/3010453.html”