志在指尖
用双手敲打未来

C#设计模式学习笔记中介者模式

一、引言
今日咱们要讲行为型设计形式的第五个形式–中介者形式,先从名字上来看。中介者形式能够了解为在两个或多个目标中心添加一个“中心目标”,由添加的“中心目标”和谐它们之间的联系。中介者形式在现实生活中的比方许多,比方:A和B经商,假设A和B是一次性生意,没有讨价还价的进程,可是A或者B的主意经常变,假设每次主意变的时分都告知对方,就会使对方很反感,不利于生意的顺利进行。此刻,假设在A和B之间添加一个C,在终究确认之前不要告知C目标,对方也就不知道(隔离了耦合,对方能够更具需求改变),等一方终究主意确认后再告知C,然后由C转告给对方。这样就简化了A和B之间的交易进程,双方都很满意。
在软件构建进程中,由于有了改变,才有添加中介者的需求。假设没有改变能够一次搞定,直接硬编码也没联系。所以说“改变”是形式的条件,无论是什么形式,就由于有改变,而咱们需求抵挡改变,才要运用相应的形式来解决问题。C#
二、中介者形式介绍
中介者形式:英文名称–MediatorPattern;分类–行为型。
2.1、动机(Motivate)
在软件构建进程中,经常会出现多个目标相彼此关交互的状况,目标之间常常会保持一种复杂的引证联系,假设遇到一些需求的更改,这种直接的引证关系将面对不断地改变。在这种状况下,咱们可运用一个“中介目标”来管理目标间的相相联系,防止彼此交互的目标之间的紧耦合引证联系,然后更好地抵挡
改变。
2.2、意图(Intent)
界说了一个中介目标来封装一系列目标之间的交互联系。中介者使各个目标之间不需求显式地彼此引证,然后使耦合性降低,并且能够独登时改变它们之间的交互行为。——《设计形式》GoF
2.3、结构图(Structure)
2.4、形式的组成
能够看出,在中介者形式的结构图有以下人物:
1)笼统中介者人物(Mediator):在里边界说各个搭档之间交互需求的办法,能够是公共的通讯办法,也能够是小范围的交互办法。
2)详细中介者人物(ConcreteMediator):它需求了解并保护各个搭档目标,并负责详细地和谐各搭档目标的交互联系。
3)笼统搭档类(Colleague):一般为笼统类,主要约束搭档目标的类型,并完成一些详细搭档类之间的公共功能。比方,每个详细搭档类都应该知道中
介者目标,也便是详细搭档类都会持有中介者目标,都能够到这个类里边。
4)详细搭档类(ConcreteColleague):完成自己的事务,需求与其他搭档通讯时分,就与持有的中介者通讯,中介者会负责与其他搭档类交互。
2.5、中介者形式的详细完成
中介者形式在现实生活中也有类似的比方,无论是QQ群、微信群或者手提电话,它们都充任一个中心渠道。QQ用户能够登录这个中心渠道与其他QQ用户进行交流,假设没有这些中心渠道,或许咱们要想和朋友聊天的话,只能是当面了。再比方:在公司管理进程中,会涉及到各个部门之间的和谐与合作。假设各个部门直接沟通,看似高效,其实不然,由于大家或许会彼此“踢皮球”。此刻沟通和谐的时分,就需求一个中心人,谁呢?总经理。在这里咱们把总经理定义为总的管理者,各个部门需求向他报告和发起作业恳求,完成代码如下:
ViewCode
运转成果如下:
三、中介者形式的完成关键
将多个目标间复杂的相相联系解耦,Mediator形式将多个目标间的操控逻辑进行会集管理,变“多个目标相彼此关”为“多个目标和一个中介者相关”,简化了系统的保护,抵挡了或许的改变。跟着操控逻辑的复杂化,Mediator详细目标的完成或许相当复杂。这时分能够对Mediator目标进行分化处理。Facade形式是解耦体系外到体系内(单向)的相相联系
Mediator形式是解耦体系内各个目标之间(双向)的相相联系
3.1、中介者形式的长处
1)松懈耦合
中介者形式通过把多个搭档目标之间的交互封装到中介目标里边,然后使得目标之间松懈耦合,基本上能够做到互不依靠。这样一来,一起目标就能够独立的改变和复用,不再“牵一发动全身”。
2)会集操控交互多个搭档目标的交互,被封装在中介者目标里边会集管理,使得这些交互行为发生改变的时分,只需求修改中介者就能够了。
3)多对多变为一对多
没有中介者形式的时分,搭档目标之间的联系一般是多对多,引进中介者目标后,中介者和搭档目标的联系一般变为双向的一对多,这会让目标的联系更容易了解和完成。
3.2、中介者形式的缺点
1)过多会集化
假设搭档目标之间的交互非常多,并且比较复杂,当这些复杂性全都会集到中介者的时分,会导致中介者目标变得十分复杂,并且难于保护和管理。
四、.NET中介者形式的完成
依据我个人的了解,ASP.NETMVC开发形式便是一个中介者形式的很好体现,其中C便是Controller,也便是中文所说的操控器。操控器便是一个中介者,M和V和它打交道,详细的状况大家能够去查看相关资料。
五、总结
为什么要运用中介者形式呢?假设不运用中介者形式的话,各个搭档目标将会彼此进行引证,假设每个目标都与多个目标进行交互时,将会构成如下图所示的网状结构。
从上图能够发现,假设不运用中介者形式的话,每个目标之间过度耦合,这样既不利于类的复用也不利于扩展。假设引进了中介者形式,那么目标之间的关系将变成星型结构,将会构成如下图所示的结构:
从上图能够发现,运用中介者形式之后,任何一个类的改变,只会影响中介者和类本身,不像之前的设计,任何一个类的改变都会引起其相关一切类的改变。这样的设计大大减少了体系的耦合度。

未经允许不得转载:IT技术网站 » C#设计模式学习笔记中介者模式
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载