Mediator(中介者)-对象行为型模式

1.意图

用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

2.动机

通过将集体行为封装在一个单独的中介者对象中,中介者负责控制和协调一组对象间的交互。中介者充当一个中介以使组中的对象不再相互显示引用。这些对象只知道中介者,从而减少了相互连接的数目。

3.适用性

  • 一组对象定义良好,但是以复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
  • 一个对象引用其它很多对象并且直接与这些对象通信,导致难以复用该对象。
  • 想定制一个分布在多个类中的行为,而又不想生成太多的子类。

4.结构

5.效果

  • 减少了子类的生成,Mediator将原本分布于多个对象间的行为集中在一起。改变这些行为只需生成Mediator的子类即可。这样各个Colleague类可被重用。
  • 将个Colleague解耦, Mediator有利于各Colleague间的松耦合,可以独立的改变和重用各Mediator类和Colleague类。
  • 简化了对象协议,用Mediator和各Colleague间的一对多的交互来替代多对多的交互。一对多的关系更易于理解,维护和扩展。
  • 它对对对象如何协作进行了抽象,将中接者作为一个独立的概念并将其封装在一个对象中,使你将注意力从对象各自本身的行为转移到它们之间的交互上来。这有助于弄清楚一个系统中的对象是如何交互的。
  • 它使控制集中化,中介者模式将交互的复杂性变为中介者的复杂性。因为中介者封装了协议,它可能比任何一个Colleague都复杂。这可能使中介者自身成为一个难于维护的庞然大物。
时间: 2024-10-18 03:50:21

Mediator(中介者)-对象行为型模式的相关文章

生成器模式(Builder)-- 对象创建型模式

1. 动机 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一个RTF(Rich Text Format)文档交换格式的阅读器应能将RTF转换为多种正文格式.该阅读器可以将RTF文档转换成普通ASCII文本或转换成一个能以交互方式编辑的正文窗口组件.但问题在于可能转换的数目是无限的.因此要能够很容易实现新的转换的增加,同时却不改变RTF阅读器.其实也就是,前面的数据接卸(源头处理)归解析,后续的显示处理,由显示处理的部分来完成.在数据解析和显示处理之间架设一个标准的桥梁

设计模式(4)-对象创建型模式-Prototype模式

1.对象创建型模式 1.4          Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 ?P r o t o t y p e(Gr a p h i c) - 声明一个克隆自身的接口. ?C o n c r e t e P r o t o t y p e(S t a ff.W h o l e N o t e.H a l fN o t e) - 实现一个克隆自身的操作. ?  C l i e n t(G r a p h i c To o l) - 让一个原

设计模式(3)-对象创建型模式-Abstract Factory模式

1.对象创建型模式 1.3           Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: ?  一个系统要独立于它的产品的创建.组合和表示时(这个需求和FactoryMethod类似). ?  一个系统要由多个产品系列中的一个来配置时(这个需求也和Factory Method类似). ?  当你要强调一系列相关的产品对象的设计以便进行联合使用时(这个需求表明一个工厂要创建多个相关的产品对象,是比FactoryMethod多的

singleton(单件)-对象创建型模式

1.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2.动机 对一些类来说,只有一个实例是很重要的.让类自身负责保存它唯一的实例,这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法. 3.适用性 当类只能有一个实例而且客户可以从一个周所周知的访问点访问它时. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 4.结构 5.代码实例 #include <iostream> #include

ProtoType(原型)-对象创建型模式

1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.动机 通过拷贝或者"克隆"一个类的实例来创建新的实例. 3.适用性 当一个系统应该独立于它的产品创建.构成和表示时,要使用Prototype模式:以及 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时或者 当一个类的实例只能有几个不同状态组合中的一种时.建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些. 4.结构 5.代码

TryBestToCode Iterator(迭代器)-对象行为型模式

1.意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示. 2.别名 Cursor-游标. 3.动机 一个聚合对象,应该提供一种方法来让别人可以访问它的元素,而又不需暴露它的内部结构. 4.适用性 访问一个聚合对象的内容而无需暴露它的内部表示. 支持聚合对象的多种遍历. 为遍历不同的聚合结构提供一个统一的接口,即,支持多态迭代. 5.结构 6.效果 迭代器模式有三个重要的作用: 支持以不同的方式遍历一个聚合,复杂的聚合可用多种方式进行遍历. 迭代器简化了聚合的接口,有了

Chain Of Responsibility(职责连)-对象行为型模式

1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 2.动机 给多个对象处理一个请求的机会,从而解耦发送者和接收者. 3.适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 4.结构 5.代码实例 //Handler.h #include <memory> cla

设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)

意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 ? 一个系统要独立于它的产品的创建.组合和表示时. ? 一个系统要由多个产品系列中的一个来配置时. ? 当你要强调一系列相关的产品对象的设计以便进行联合使用时. ? 当你提供一个产品类库,而只想显示它们的接口而不是实现时. 结构 模式结构图如下所示: Creator: 声明一个创建抽象产品对象的操作接口. ConcreteCreator:(Concrete

Iterator(迭代器)-对象行为型模式

1.意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示. 2.别名 Cursor-游标. 3.动机 一个聚合对象,应该提供一种方法来让别人可以访问它的元素,而又不需暴露它的内部结构. 4.适用性 访问一个聚合对象的内容而无需暴露它的内部表示. 支持聚合对象的多种遍历. 为遍历不同的聚合结构提供一个统一的接口,即,支持多态迭代. 5.结构 6.效果 迭代器模式有三个重要的作用: 支持以不同的方式遍历一个聚合,复杂的聚合可用多种方式进行遍历. 迭代器简化了聚合的接口,有了