欢迎来到天天文库
浏览记录
ID:14806669
大小:89.40 KB
页数:9页
时间:2018-07-30
《设计模式学习笔记--mediator 中介者模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成。当彼此引用的对象数量比较少时,此时对象之间就为直接交互(点对点)。而当对象的数量增加时,这种直接交互会导致对象之间复杂的、混乱的引用,最后形成一张巨大的网,这就会影响应用程序的可维护性。同时,因为对象之间的高耦合,当一个对象直接引用其他的对象时,缩小了这些对象的复用范围。 因此:我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。 以上的变化反映在下图: 中介者模式的相关角色如下图: 由图可知,它的角色有: 1、抽象同伴类角
2、色ColleagueBase。它是"具体同伴类角色"的基类,同时在它内部要引用到一个抽象中介类成员。 2、抽象中介类角色MediatorBase。它是"具体中介类角色"的基类.它定义了要求其子类必须完成的方法,此方法可以被具体同伴类角色调用。 3、具体同伴类角色ConcreteColleagueA/B. 它们都继承自"抽象同伴类角色ColleagueBase",由具体同伴类角色所产生的实例化对象不再像以前那样相互之间直接联系,而是通过"具体中介类角色"进行统一协调和管理。在上图中所定义的Send和Receive方法表示此类具有发送和接收信息的功能,但这时的发送和接收
3、通讯是在ConcreteColleague与Mediator之间进行,而不是在ConcreteColleague之间直接通讯,因为通过Mediator,它们与自己的同伴之间早就解除了耦合。 4、具体中介类角色ConcreteMediator. 它实现了抽象中介类角色所定义的通讯功能(此图中是Sendmessage功能)。但此功能是由具体同伴类角色实例ConcreteColleague来调用的,因为在具体中介类角色实例中保存了所有参与活动的具体同伴类角色实例的引用,它们在Mediator中介角色里集中放置与管理。当我们调用相关通讯功能时,通过中介者角色的管理,由它来决
4、定信息通讯的目的地。下面我们用代码来加以说明我们有两段程序,一个用于演示中介者模式工作的基本流程,另一个我们使用中介者模式来模拟一个聊天室。一、基本流程示例代码1、抽象同伴类角色AbsPeopleusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMediator{ abstract class AbsPeople { protected AbsMediator mediator; #reg
5、ion 构造函数 public AbsPeople(AbsMediator mediator) { this.mediator = mediator; } #endregion }}2、抽象中介类角色AbsMediatorusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMediator{ //抽象中介类角色AbsMediator //
6、在这里定义了需要实现的通讯方法 abstract class AbsMediator { //在Send方法中,传入的是AbsPeople接口,它是具体People类的基类 public abstract void Send(string message,AbsPeople people); }}3、具体同伴类角色Student与Teacherusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespa
7、ce MyMediator{ //定义具体同伴类角色 Student类 Teacher类}4、具体中介类角色RealMediatorusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMediator{ class RealMediator: AbsMediator { //在Mediator的具体类中融合了所有相关联的People private Student _
此文档下载收益归作者所有