中介者

中介者模式:使用中介者来集中相关对象之间复杂的沟通方式和控制方式。

Bob有一个自动屋,当他的闹钟响了只有,闹钟会告诉咖啡壶开始煮咖啡。后来客户不断的提出许多新需求:周末不要提供咖啡、下班后需要扫地机器人扫地等。这个时候咖啡壶需要接受闹钟并检查日期,而日历需要接受闹钟的询问并告诉闹钟是否周末,扫地机器人需要接受闹钟并检查是否下班时间等等一系列操作。

想要持续地追踪每个对象的每个规则,以及众多对象之间彼此错综复杂的关系对于设计来说不满足单一职责,同时可能会相互引用造成系统复杂。这个时候就可以使用中介者模式,在系统中引入一个中介者。

  • 每个对象都会在自己的状态改变时,告诉中介者。
  • 每个对象都会对中介者发出的请求作出响应。

设计类图:

1) Mediator 抽象中介者
  用于定义统一的接口, 用于各设备对象之间的交互
2) Concrete Mediator 具体中介者
  具体中介者持有各设备对象的引用, 负责协调各设备对象的行为以完成协作, 因此具体中介者必须依赖具体设备对象(不符合依赖倒置原则)
3) Equipment 设备抽象类
  每个设备都知道中介者对象(持有接口引用),  与其他设备通信的时候,都通过中介者协作完成
  每个设备实现接口用于中介者通知

优点:

1、通过将对象彼此解耦,可以增加对象的复用性。

2、通过将控制逻辑集中,可以简化系统维护。

3、可以让对象之间所传递的消息变得简单而且大幅减少。

用途和缺点

1、中介者常常被用来协调相关的GUI组件。

2、中介者的缺点是,如果设计不当,中介者对象本身会变得过于复杂。

备忘录

备忘录模式:当你需要让对象返回之前的状态时,就使用备忘录模式(例如,“撤销”操作)

比如我们经常玩的单机游戏,当用户进入到下一关时我们在游戏中死亡,一般复活后就是从这关游戏的最开始复活。而对于我们进入到下一关时就是一个备忘录模式,让我们停留在上一次过关的关卡上。

备忘录模式有两个目标:

  • 储存系统关键对象的重要状态。
  • 维护关键对象的封装。

不要忘记了单一职责,不要把保持状态的工作和关键对象混为一谈。这个专门掌握状态的对象,就称为备忘录。

设计类图:

优点:

1、将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚。

2、保持关键对象的数据封装。

3、提供能容易实现的恢复能力。

用途和缺点:

1、备忘录用于存储状态。

2、使用备忘录的缺点:存储和恢复状态的过程可能相当耗时。

3、在系统设计时可以考虑使用序列化(serialization)机制存储系统的对象。

Head First设计模式——中介者模式和备忘录模式的更多相关文章

  1. 设计模式之第17章-备忘录模式(Java实现)

    设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...

  2. C#设计模式学习笔记:(22)备忘录模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8176974.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第十个模式--备 ...

  3. 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)

    概述: 我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉. ...

  4. 设计模式20---设计模式之备忘录模式(Memento)(行为型)

    1.讲解备忘录模式 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 1.1定义 在不破坏封 ...

  5. C#设计模式之二十二备忘录模式(Memeto Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第十个模式,该模式是[备忘录模式],英文名称是:Memento Pattern.按老规矩,先从名称上来看看这个模式,个人的最初理解就 ...

  6. C#设计模式之二十二备忘录模式(Memento Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第十个模式,该模式是[备忘录模式],英文名称是:Memento Pattern.按老规矩,先从名称上来看看这个模式,个人的最初理解就是对某个对象的状态进行保 ...

  7. 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式

    [状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...

  8. Java设计模式(21)——行为模式之备忘录模式(Memento)

    一.概述 概念 UML简图 角色 根据下图得到角色 备忘录角色(Memento).发起人角色(Originator).负责人角色(Caretaker) 二.实践 使用白箱实现,给出角色的代码: 发起人 ...

  9. 【设计模式】行为型07备忘录模式(Memento Pattern)

    参考地址:http://www.runoob.com/design-pattern/memento-pattern.html 对原文总结调整,以及修改代码以更清晰的展示: 备忘录模式(快照模式):   ...

随机推荐

  1. OLED带来全新视觉体验

    2013年1月,在国际消费电子展(CES)上世界首款曲面OLED电视--LG OLED电视亮相,LG Display将曲面与OLED完美结合的面板技术让显示设备的外观和品质都达到了一个全新的高度,惊艳 ...

  2. Alfresco的安装配置(Centos6系统中安装)

    Alfresco是一款开源的企业内容管理系统(ECMS),为企业提供了日常的文档管理.协同工作.工作记录管理.知识管理.网络内容管理.图片管理等多种功能. Alfresco是目前应用最广泛的开源企业知 ...

  3. Web服务器的配置与管理

    Web服务器的配置与管理(2) 虚拟主机技术 在上篇博文中,我们已经利用IIS搭建好了一台Web服务器,并可以成功访问IIS中自带的默认站点,那么我们是否可以在这台服务器中再创建另外一个Web站点?也 ...

  4. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  5. jenkins发布项目到远程主机上,配置linux使用SSH免密码登录

    一.首先要配置两台linux如何使用SSH免密码登录,这样脚本执行scp命令以及远程执行脚本都不需要输入密码: A为本地主机(即用于控制其他主机的机器,jenkins服务器) ; B为远程主机(即被控 ...

  6. get请求直接通过浏览器发请求传数组或者list到后台

    原文链接: http://blog.csdn.net/qq_27093465/article/details/76160419 感谢原作者 例如: http://localhost:27001/tes ...

  7. python jQuery筛选器

    筛选器:$(this).next() 下一个    $(this).prev  上一个    $(this).parent()  父     $(this).children() 孩     $(th ...

  8. mysql表关系

    表与表之间的关系 """ 把所有数据都存放于一张表的弊端 1.组织结构不清晰 2.浪费硬盘空间 3.扩展性极差 """ # 上述的弊端产生原 ...

  9. paxos算法学习总结

    核心思想 分布式系统架构下如何让整体尽快达成一致观点,也就是多个不同观点收敛到一个观点的过程. 难点 可能会发生少数节点故障,但绝不是大面积故障,不然系统也没法正常工作. 由于存在单点故障,因此不可能 ...

  10. Oracle的LOB(CLOB)大字段以及(SYS_LOB***$$)清理

    文章结构如下: 1.背景: 生产上查询那些大表然后进行清理,然而发现有SYS_LOB0000093441C00002$$这中表段占用30G(只保留一个月,如果保留更久会更大). 2.LOB介绍 Ora ...