设计模式中介者模式Mediator.pptx
- 文档编号:2180266
- 上传时间:2022-10-27
- 格式:PPTX
- 页数:38
- 大小:2.28MB
设计模式中介者模式Mediator.pptx
《设计模式中介者模式Mediator.pptx》由会员分享,可在线阅读,更多相关《设计模式中介者模式Mediator.pptx(38页珍藏版)》请在冰豆网上搜索。
LOGO设计模式设计模式(DesignPattern)张凯副教授计算机学院软件工程系武汉科技大学问题问题(Problem)(Problem)v完善的进销存系统武汉科技大学问题问题(Problem)(Problem)v相互连接的计算机武汉科技大学问题问题(Problem)(Problem)v复杂的国家关系武汉科技大学问题问题(Problem)(Problem)v完善的进销存系统武汉科技大学问题问题(Problem)(Problem)v相互连接的计算机武汉科技大学问题问题(Problem)(Problem)v复杂的国家关系武汉科技大学中介者模式中介者模式(Mediator)(Mediator)武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v系统将出现如下问题系统结构复杂:
对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。
对象可重用性差:
由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱。
系统扩展性低:
增加一个新的对象需要在原有相关对象上增加引用,增加新的引用关系也需要调整原有对象,系统耦合度很高,对象操作很不灵活,扩展性差。
武汉科技大学主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3模式效果与应用4武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式动机在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责。
对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式,这就是中介者模式的模式动机。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式定义中介者模式(MediatorPattern)定义:
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式又称为调停者模式,它是一种对象行为型模式。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式结构武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v参与者Mediator:
抽象中介者ConcreteMediator:
具体中介者Colleague:
抽象同事类ConcreteColleague:
具体同事类武汉科技大学中介者模式中介者模式(Mediator)(Mediator)abstractclassColleagueprotectedMediatormediator;publicColleague(Mediatormediator)this.mediator=mediator;abstractclassMediatorpublicabstractvoidSend(stringmessage,Colleaguecolleague);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)classConcreteColleague1:
ColleaguepublicConcreteColleague1(Mediatormediator):
base(mediator)publicvoidSend(stringmessage)mediator.Send(message,this);publicvoidNotify(stringmessage)Console.WriteLine(同事1得到信息:
+message);classConcreteColleague2:
ColleaguepublicConcreteColleague2(Mediatormediator):
base(mediator)publicvoidSend(stringmessage)mediator.Send(message,this);publicvoidNotify(stringmessage)Console.WriteLine(同事2得到信息:
+message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)classConcreteMediator:
MediatorprivateConcreteColleague1colleague1;privateConcreteColleague2colleague2;publicConcreteColleague1Colleague1setcolleague1=value;publicConcreteColleague2Colleague2setcolleague2=value;publicoverridevoidSend(stringmessage,Colleaguecolleague)if(colleague=colleague1)colleague2.Notify(message);elsecolleague1.Notify(message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)staticvoidMain(stringargs)ConcreteMediatorm=newConcreteMediator();ConcreteColleague1c1=newConcreteColleague1(m);ConcreteColleague2c2=newConcreteColleague2(m);m.Colleague1=c1;m.Colleague2=c2;c1.Send(吃过饭了吗?
);c2.Send(没有呢,你打算请客?
);Console.Read();武汉科技大学中介者模式中介者模式(Mediator)(Mediator)武汉科技大学中介者模式中介者模式(Mediator)(Mediator)/国家abstractclassCountryprotectedUnitedNationsmediator;publicCountry(UnitedNationsmediator)this.mediator=mediator;/联合国机构abstractclassUnitedNations/声明/声明信息/声明国家publicabstractvoidDeclare(stringmessage,Countrycolleague);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)classUSA:
Country/美国publicUSA(UnitedNationsmediator):
base(mediator)publicvoidDeclare(stringmessage)/声明mediator.Declare(message,this);publicvoidGetMessage(stringmessage)/获得消息Console.WriteLine(美国获得对方信息:
+message);classIraq:
Country/伊拉克publicIraq(UnitedNationsmediator):
base(mediator)publicvoidDeclare(stringmessage)/声明mediator.Declare(message,this);publicvoidGetMessage(stringmessage)/获得消息Console.WriteLine(伊拉克获得对方信息:
+message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)/联合国安全理事会classUnitedNationsSecurityCouncil:
UnitedNationsprivateUSAcolleague1;privateIraqcolleague2;publicUSAColleague1setcolleague1=value;publicIraqColleague2setcolleague2=value;publicoverridevoidDeclare(stringmessage,Countrycolleague)if(colleague=colleague1)colleague2.GetMessage(message);elsecolleague1.GetMessage(message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)staticvoidMain(stringargs)UnitedNationsSecurityCouncilUNSC=newUnitedNationsSecurityCouncil();USAc1=newUSA(UNSC);Iraqc2=newIraq(UNSC);UNSC.Colleague1=c1;UNSC.Colleague2=c2;c1.Declare(不准研制核武器,否则要发动战争!
);c2.Declare(我们没有核武器,也不怕侵略。
);Console.Read();武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v中介者模式模式的优点如下简化了对象之间的交互。
将各同事解耦。
减少子类生成。
可以简化各同事类的设计和实现。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v中介者模式模式的缺点如下在具体中介者类中包含了同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式使用系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解。
一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。
想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的中介者类。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式应用中介者模式与迪米特法则在中介者模式中,通过创造出一个中介者对象,将系统中有关的对象所引用的其他对象数目减少到最少,使得一个对象与其同事之间的相互作用被这个对象与中介者对象之间的相互作用所取代。
因此,中介者模式就是迪米特法则的一个典型应用。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则迪米特法则又叫最少知道原则,最早是在1987年由美国NortheasternUniversity的IanHolland提出。
通俗的来讲,就是一个类对自己依赖的类知道的越少越好。
也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则迪米特法则还有一个更简单的定义:
只与直接的朋友通信。
直接的朋友:
每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。
耦合的方式很多,依赖、关联、组合、聚合等。
其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。
也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则某人与一个朋友组成自己的朋友圈,两
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 中介 Mediator