设计模式.中介者模式Media.pptx

上传人:wuy****n92 文档编号:54735397 上传时间:2022-10-29 格式:PPTX 页数:40 大小:2.43MB
返回 下载 相关 举报
设计模式.中介者模式Media.pptx_第1页
第1页 / 共40页
设计模式.中介者模式Media.pptx_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《设计模式.中介者模式Media.pptx》由会员分享,可在线阅读,更多相关《设计模式.中介者模式Media.pptx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、LOGO设计模式设计模式(Design Pattern)张凯 副教授计算机学院 软件工程系武汉科技大学问题问题(Problem)(Problem)v完善的进销存系统武汉科技大学问题问题(Problem)(Problem)v相互连接的计算机武汉科技大学问题问题(Problem)(Problem)v复杂的国家关系武汉科技大学问题问题(Problem)(Problem)v完善的进销存系统武汉科技大学问题问题(Problem)(Problem)v相互连接的计算机武汉科技大学问题问题(Problem)(Problem)v复杂的国家关系武汉科技大学中介者模式中介者模式(Mediator)(Mediator

2、)武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v系统将出现如下问题系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。对象可重用性差:由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱。系统扩展性低:增加一个新的对象需要在原有相关对象上增加引用,增加新的引用关系也需要调整原有对象,系统耦合度很高,对象操作很不灵活,扩展性差。武汉科技大学主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3

3、模式效果与应用4武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式动机在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责。对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式,这就是中介者模式的模式动机。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式定义 中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,

4、从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式结构 武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v参与者 Mediator:抽象中介者ConcreteMediator:具体中介者Colleague:抽象同事类ConcreteColleague:具体同事类武汉科技大学中介者模式中介者模式(Mediator)(Mediator)abstract class Colleague protected Mediator mediator;pu

5、blic Colleague(Mediator mediator)this.mediator=mediator;abstract class Mediator public abstract void Send(string message,Colleague colleague);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)class ConcreteColleague1:Colleague public ConcreteColleague1(Mediator mediator):base(mediator)public void Send(string mess

6、age)mediator.Send(message,this);public void Notify(string message)Console.WriteLine(同事1得到信息:+message);class ConcreteColleague2:Colleague public ConcreteColleague2(Mediator mediator):base(mediator)public void Send(string message)mediator.Send(message,this);public void Notify(string message)Console.Wr

7、iteLine(同事2得到信息:+message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)class ConcreteMediator:Mediator private ConcreteColleague1 colleague1;private ConcreteColleague2 colleague2;public ConcreteColleague1 Colleague1 set colleague1=value;public ConcreteColleague2 Colleague2 set colleague2=value;public overrid

8、e void Send(string message,Colleague colleague)if(colleague=colleague1)colleague2.Notify(message);else colleague1.Notify(message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)static void Main(string args)ConcreteMediator m=new ConcreteMediator();ConcreteColleague1 c1=new ConcreteColleague1(m);ConcreteColleag

9、ue2 c2=new ConcreteColleague2(m);m.Colleague1=c1;m.Colleague2=c2;c1.Send(吃过饭了吗?);c2.Send(没有呢,你打算请客?);Console.Read();武汉科技大学中介者模式中介者模式(Mediator)(Mediator)武汉科技大学中介者模式中介者模式(Mediator)(Mediator)/国家 abstract class Country protected UnitedNations mediator;public Country(UnitedNations mediator)this.mediator=

10、mediator;/联合国机构 abstract class UnitedNations /声明 /声明信息 /声明国家 public abstract void Declare(string message,Country colleague);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)class USA:Country /美国 public USA(UnitedNations mediator):base(mediator)public void Declare(string message)/声明 mediator.Declare(message,this)

11、;public void GetMessage(string message)/获得消息 Console.WriteLine(美国获得对方信息:+message);class Iraq:Country /伊拉克 public Iraq(UnitedNations mediator):base(mediator)public void Declare(string message)/声明 mediator.Declare(message,this);public void GetMessage(string message)/获得消息 Console.WriteLine(伊拉克获得对方信息:+m

12、essage);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)/联合国安全理事会 class UnitedNationsSecurityCouncil:UnitedNations private USA colleague1;private Iraq colleague2;public USA Colleague1 set colleague1=value;public Iraq Colleague2 set colleague2=value;public override void Declare(string message,Country colleague)i

13、f(colleague=colleague1)colleague2.GetMessage(message);else colleague1.GetMessage(message);武汉科技大学中介者模式中介者模式(Mediator)(Mediator)static void Main(string args)UnitedNationsSecurityCouncil UNSC=new UnitedNationsSecurityCouncil();USA c1=new USA(UNSC);Iraq c2=new Iraq(UNSC);UNSC.Colleague1=c1;UNSC.Colleagu

14、e2=c2;c1.Declare(不准研制核武器,否则要发动战争!);c2.Declare(我们没有核武器,也不怕侵略。);Console.Read();武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v中介者模式又叫调停者模式类之间的交流像战争一样,很混乱,需要加入一个中心,大家都和中心交流,听从中心安排。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v中介者模式又叫调停者模式机场调度中心如果没有机场调度中心,每一个飞机需要自己看有没有飞机和自己一起抵达,有没有空跑道降落,场面异常混乱有了机场调度中心,飞机听从安排就可以了QQ服务器如果没有Q

15、Q服务器,消息在网络中可以用广播发送,每个客户既是客户端,又是服务器端如果有了QQ服务器,张三发给李四,其过程是:张三发消息,服务器收到消息,查找李四,发消息给李四,通知张三,消息已经送达。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v中介者模式模式的优点如下简化了对象之间的交互。将各同事解耦。减少子类生成。可以简化各同事类的设计和实现。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v中介者模式模式的缺点如下在具体中介者类中包含了同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。武汉科技大学中介者模式中介者模式(Medi

16、ator)(Mediator)v模式使用系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解。一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的中介者类。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v模式应用中介者模式与迪米特法则在中介者模式中,通过创造出一个中介者对象,将系统中有关的对象所引用的其他对象数目减少到最少,使得一个对象与其同事之间的相互作用被这个对象与中介者对

17、象之间的相互作用所取代。因此,中介者模式就是迪米特法则的一个典型应用。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则迪米特法则还有一个更简单的定义:只与直接的朋友通信

18、。直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则某人与一个朋友组成自己的朋友圈,两个人都需要与一个圈外的陌生人发生相互作用。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则某人与朋友的朋友圈,“朋友”与陌生人若

19、是朋友关系,则组成”朋友“的朋友圈武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则某人需要与陌生人发生联系,迪米特法则建议某人通过朋友与陌生人发生相互作用。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则狭义迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另外一个类的某一个方法的话,可以通过第三者转发这个调用。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法

20、则要去完成的。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则门面模式中介者模式武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则广义的迪米特法则迪米特法则所谈论的,就是对象之间信息流量、流向以及信息的影响的控制。在软件系统中,一个模块设计的好不好的最重要、最主要的标志:就是该模块在多大的程度上将自己的内部数据和其他与实现有关的细节隐藏起来。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则一个设计的好的模块可以将它所有的实现细节隐藏起来,彻底的将提供给外界的API和自己的实现分割开来。这样,模块与模块之间就可以仅仅通过彼此的API相互通信,而不理会模块内部的工作细节。这就是“信息的隐藏”,或“封装”。封装的意义在于:可以使各个子系统之间脱耦,从而允许他们独立的被开发、优化、使用、阅读、修改。武汉科技大学中介者模式中介者模式(Mediator)(Mediator)v迪米特法则脱耦,由于可以独立的同时开发,因而可以有效的加快系统的开发过程。而且,是维护过程变得容易,而不必担心对其他模块的影响。信息的隐藏,可以促进软件的复用。由于每一个模块都不依赖于其他模块而存在,因此每一个模块都可以独立地在其他的地方使用。一个系统的规模越大,信息的隐藏就越重要,封装的效能也越明显。LOGO

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁