[code]
语义:类和类之间不要直接打交道,通过一个中间类来打交道,这个中间类就是调停者,也就是中介
原来的结构是网状的,这样加入一个中介,把他变成星型结构。。这样让中间这个类变得复杂,让旁边的类变得简单。。。。
大家在每个机场都会看到有一个叫做“XX 机场调度中心”,这个是做什么用的呢?就是
具体的中介者,调度每一架要降落和起飞的飞机,一架分机(同事类)飞到机场上空了,就询问(同事类方法)调度中心(中介者)“我是否可以降落”,“降落到那个跑道”,然后调度中心(中介者)查看其他飞机(同事类)情况,通知飞机降落,我们来设想一下,如果没有机场调度中心会是什么样子的:飞机到机场了,自己要先看看有没有飞机和自己一起降落的,有没有空跑道,停机位是否具备等等情况,这不是要了飞行员老命才怪!
MVC 框架。大家都应该使用过Struts 吧,MVC 框架,其中的C(Controller)就是一个中介者,叫做前端控制器(Front Controller),它的作用就是把M(Model,业务逻辑)和V(View,视图)隔离开,协调M和V 协同工作,把M 运行的结果和V 代表的视图融合成一个前端可以展示的页面,减少M 和V 的依赖关系。MVC 框架已经成为一个非常流行、成熟的开发框架,这也是中介者模式优秀的一个体现。
C/S 结构。C/S 结构的应用也是一个典型的中介者模式,比如MSN,张三发一个消息给李四,其过程应该是这样的:张三发送消息,MSN 服务器(中介者)接受到消息,查找李四,把消息发送到李四,同时通知张三,消息已经发送,在这里MSN 服务器就是一个中转站,负责协调两个客户端的信息交流,与此相反的就是IPMSG(也叫飞鸽)没有使用中介者,直接使用了UDP 广播的方式,每个客户端既是客户端也是服务端。
大家可以在如下的情况下尝试使用中介者模式:
1、N 个对象之间产生了相互的依赖关系,其中N 大于2,注意是相互的依赖;
2、多个对象有依赖关系,但是依赖的行为尚不确定或者有发生改变的可能,在这种情况下一般建议采用中介者模式,降低变更引起的风险扩散;
3、产品开发。其中一个明显的例子就是MVC 框架,把这个应用到产品中,可以提升产品的性能和扩展性,但是作为项目开发就未必,项目是以交付投产为目标,而产品以稳定、高效、扩展为宗旨。
每一个协作的类都拥有一个中介者的引用,而中介者却拥有协作类的方法。。。。。
[/code]
语义:类和类之间不要直接打交道,通过一个中间类来打交道,这个中间类就是调停者,也就是中介
原来的结构是网状的,这样加入一个中介,把他变成星型结构。。这样让中间这个类变得复杂,让旁边的类变得简单。。。。
大家在每个机场都会看到有一个叫做“XX 机场调度中心”,这个是做什么用的呢?就是
具体的中介者,调度每一架要降落和起飞的飞机,一架分机(同事类)飞到机场上空了,就询问(同事类方法)调度中心(中介者)“我是否可以降落”,“降落到那个跑道”,然后调度中心(中介者)查看其他飞机(同事类)情况,通知飞机降落,我们来设想一下,如果没有机场调度中心会是什么样子的:飞机到机场了,自己要先看看有没有飞机和自己一起降落的,有没有空跑道,停机位是否具备等等情况,这不是要了飞行员老命才怪!
MVC 框架。大家都应该使用过Struts 吧,MVC 框架,其中的C(Controller)就是一个中介者,叫做前端控制器(Front Controller),它的作用就是把M(Model,业务逻辑)和V(View,视图)隔离开,协调M和V 协同工作,把M 运行的结果和V 代表的视图融合成一个前端可以展示的页面,减少M 和V 的依赖关系。MVC 框架已经成为一个非常流行、成熟的开发框架,这也是中介者模式优秀的一个体现。
C/S 结构。C/S 结构的应用也是一个典型的中介者模式,比如MSN,张三发一个消息给李四,其过程应该是这样的:张三发送消息,MSN 服务器(中介者)接受到消息,查找李四,把消息发送到李四,同时通知张三,消息已经发送,在这里MSN 服务器就是一个中转站,负责协调两个客户端的信息交流,与此相反的就是IPMSG(也叫飞鸽)没有使用中介者,直接使用了UDP 广播的方式,每个客户端既是客户端也是服务端。
大家可以在如下的情况下尝试使用中介者模式:
1、N 个对象之间产生了相互的依赖关系,其中N 大于2,注意是相互的依赖;
2、多个对象有依赖关系,但是依赖的行为尚不确定或者有发生改变的可能,在这种情况下一般建议采用中介者模式,降低变更引起的风险扩散;
3、产品开发。其中一个明显的例子就是MVC 框架,把这个应用到产品中,可以提升产品的性能和扩展性,但是作为项目开发就未必,项目是以交付投产为目标,而产品以稳定、高效、扩展为宗旨。
每一个协作的类都拥有一个中介者的引用,而中介者却拥有协作类的方法。。。。。
[/code]