GeekBand-C++设计模式-Week2

代理模式

代理模式的定义

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
代理模式的英文叫做Proxy或Surrogate,中文都可译成“代理”。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式和适配器模式的区别:适配器模式的用意是要改变所考虑的对象的接口,而代理模式并不能改变所代理对象的接口。
代理模式和装饰模式的区别:装饰模式应当为所装饰的对象提供增强功能,而代理模式对对象的使用施加控制,并不提供对象本身的增强功能。
代码模式和门面模式:有时候,门面模式兼任代理的职责,这时候,门面模式又叫做代理门面模式,或门面代理模式。

代理模式的结构

类图和时序图
Paste_Image.png
Paste_Image.png
所涉及的角色

(1)抽象主题角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以使用代理主题。
(2)代理主题(Proxy)角色:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题,控制对真实主题的引用,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常在将客户端调用传递给真实主题之前或者之后,都要执行某个操作,而不是单纯地将调用传递给真实对象。
(3)真实主题角色:定义了代理角色所代表的真实对象。

中介者模式

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

通用类图:

Paste_Image.png

举例:在一个公司里面,有很多部门、员工(统称他们互相为"同事"),为了完成一定的任务,“同事”之间肯定有许多需要互相配合、交流的过程。如果由各个“同事”频繁地到处去与自己有关的“同事”沟通,这样肯定会形成一个多对多的杂乱的联系网络而造成工作效率低下。

此时就需要一位**专门的“中介者”
**给各个“同事”分配任务,以及统一跟进大家的进度并在“同事”之间实时地进行交互,保证“同事”之间必须的沟通交流。很明显我们知道此时的“中介者”担任了沟通“同事”彼此之间的重要角色了,“中介者”使得每个“同事”都变成一对一的联系方式,减轻了每个“同事”的负担,增强工作效率。

大概理清上面简单例子中的意图之后,给出中介者模式适用场景:
1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
2、一个对象引用其他很多对象并且直接与这些对象通信,
导致难以复用该对象。

3、想定制一个分布在多个类中的行为,而又不想生成太多的子类。

其实,中介者模式又被称为“调停者”模式,我们可以理解为一群小孩子(同事)吵架了,这时就很需要一位大人(调停者)过来处理好小孩子们的关系,以免发生不必要的冲突。“中介者”和“调停者”只不过是同一个英语单词“Mediator”的不同翻译罢了。反正最最重要的是:**中介者就是一个处于众多对象,并恰当地处理众多对象之间相互之间的联系的角色。
**

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,970评论 1 15
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,827评论 2 17
  • 好的软件设计是多用代码复用,但实际设计中却要遇到许多变化,而变化是复用的天敌。为了能够尽量减少变化所带来的设计复杂...
    CharlesW阅读 585评论 0 0
  • 转载自:经典:从追MM谈Java的23种设计模式 佩服原文作者对设计模式的深刻理解,哈哈哈😁 一. 创建型模式 1...
    涛大阅读 907评论 0 2
  • 构造型模式 Factory Method (工厂方法) Abstract Factory(抽象工厂) Builde...
    738bc070cd74阅读 405评论 1 4