你的位置:首页 > 软件开发 > ASP.net > 设计模式学习笔记(九:中介者模式)

设计模式学习笔记(九:中介者模式)

发布时间:2016-10-25 16:00:03
1.1概述 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。这就是中介者模式的定义。 一个对象含有另一个对象的引用是面向对象中经常使用的方式,也是面向对象所提倡的,即少用继承 ...

1.1概述

    用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。这就是中介者模式的定义。

    一个对象含有另一个对象的引用是get='_blank'>面向对象中经常使用的方式,也是面向对象所提倡的,即少用继承多用组合。但是怎样合理地组合对象对系统今后的扩展、维护和对象的复用是至关重要的,这也正是学习设计模式的重要原因。

    例如,在一个房屋租赁系统中,有很多对象,有些对象是求租者,有些是出租者,如果要求他们之间必须成为朋友才能进行有关租赁的操作,显然不利于系统的维护和发展,因此,每当有新的出租者或求租者加入该系统,这个新的加入者必须和现有系统中的所有人互为朋友后才能和他们进行有关租赁的操作,这就意味着要修改大量的代码,这对系统的维护是非常不利的也是无法容忍的。一个好的解决办法就是在房屋租赁系统中建立一个称作中介者的对象,中介者包含系统中所有其他对象的引用,而系统中的其他对象只包含中介者的引用,也就是说中介者和大家互为朋友、中介者使系统中的其他对象完全解耦,当系统中某个对象需要和系统中另外一个对象交互时,只需将自己的请求通知中介者即可,如果有新的加入者,该加入者只需含有中介者的引用,并让中介者含有自己的引用,他就可以和系统中其他对象进行有关租赁操作,具体如下图一所示:

 设计模式学习笔记(九:中介者模式)

 

图一:中介者、出租者和求租者

    中介者模式是封装一系列的对象交互的成熟模式,其关键是将对象之间的交互封装在称作中介者的对象中,中介者使各对象不需要显示地相互吸引,这些对象只包含中介者的引用。当系统中某个对象需要和系统中另外一个对象交互时,只需要将自己的请求通知给中介者即可。

 

 

1.2模式的结构

中介者模式的结构包含四种角色:

(1)中介者(Mediator):中介者是一个接口,该接口定义了用于同事对象之间进行通信的方法。

(2)具体中介者(ConcreteMediator):具体中介者是实现中介者接口的类。具体中介者需要包含所有具体同事的引用,并通过实现中介者接口中的方法来满足具体同事之间的通信请求。

(3)同事(Colleague):一个接口,规定了具体同事需要实现的方法。

(4)具体同事(ConcreteColleague):实现同事接口的类。具体同事需要包含具体中介者的引用,一个具体同事需要和其他具体同事交互时,只需要将自己的请求通知给它所包含的具体中介者即可。

中介者模式结构的类图如下图二所示:

 设计模式学习笔记(九:中介者模式)

 

图二:中介者模式类图

 

 

1.3中介者模式的优点

(1)可以避免许多的对象为了通信而相互显示引用,否则,不仅系统难于维护,而且也使其他系统难以复用这些对象。

(2)可以通过中介者将原本分布于多个对象之间的交互行为集中在一起。当这些对象之间需要改变之间的通信行为时,只需要使用一个具体中介者即可,不必修改各个具体同事的代码,即这些同事可被重用。

(3)具体中介者使得各个具体同事完全解耦,修改任何一个具体同事的代码不会影响到其他同事。

(4)具体中介者集中了同事之间是如何交互的细节,使系统比较清楚地知道整个系统中的同事是如何交互的。

(5)当一些对象相互通信,但又无法相互包含对方的引用,那么使用中介者模式就可以使这些对象相互通信。

 

1.4适合使用中介者模式的情景

 (1)许多对象以复杂的方式交互,所导致的依赖关系使系统难以理解和维护。

 (2)一个对象引用其他很多对象,导致难以复用该对象。

 


 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:设计模式学习笔记(九:中介者模式)

关键词:设计模式

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。