Head First设计模式——中介者模式和备忘录模式
中介者
中介者模式:使用中介者来集中相关对象之间复杂的沟通方式和控制方式。
Bob有一个自动屋,当他的闹钟响了只有,闹钟会告诉咖啡壶开始煮咖啡。后来客户不断的提出许多新需求:周末不要提供咖啡、下班后需要扫地机器人扫地等。这个时候咖啡壶需要接受闹钟并检查日期,而日历需要接受闹钟的询问并告诉闹钟是否周末,扫地机器人需要接受闹钟并检查是否下班时间等等一系列操作。
想要持续地追踪每个对象的每个规则,以及众多对象之间彼此错综复杂的关系对于设计来说不满足单一职责,同时可能会相互引用造成系统复杂。这个时候就可以使用中介者模式,在系统中引入一个中介者。
- 每个对象都会在自己的状态改变时,告诉中介者。
- 每个对象都会对中介者发出的请求作出响应。
设计类图:
1) Mediator 抽象中介者
用于定义统一的接口, 用于各设备对象之间的交互
2) Concrete Mediator 具体中介者
具体中介者持有各设备对象的引用, 负责协调各设备对象的行为以完成协作, 因此具体中介者必须依赖具体设备对象(不符合依赖倒置原则)
3) Equipment 设备抽象类
每个设备都知道中介者对象(持有接口引用), 与其他设备通信的时候,都通过中介者协作完成
每个设备实现接口用于中介者通知
优点:
1、通过将对象彼此解耦,可以增加对象的复用性。
2、通过将控制逻辑集中,可以简化系统维护。
3、可以让对象之间所传递的消息变得简单而且大幅减少。
用途和缺点
1、中介者常常被用来协调相关的GUI组件。
2、中介者的缺点是,如果设计不当,中介者对象本身会变得过于复杂。
备忘录
备忘录模式:当你需要让对象返回之前的状态时,就使用备忘录模式(例如,“撤销”操作)
比如我们经常玩的单机游戏,当用户进入到下一关时我们在游戏中死亡,一般复活后就是从这关游戏的最开始复活。而对于我们进入到下一关时就是一个备忘录模式,让我们停留在上一次过关的关卡上。
备忘录模式有两个目标:
- 储存系统关键对象的重要状态。
- 维护关键对象的封装。
不要忘记了单一职责,不要把保持状态的工作和关键对象混为一谈。这个专门掌握状态的对象,就称为备忘录。
设计类图:
优点:
1、将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚。
2、保持关键对象的数据封装。
3、提供能容易实现的恢复能力。
用途和缺点:
1、备忘录用于存储状态。
2、使用备忘录的缺点:存储和恢复状态的过程可能相当耗时。
3、在系统设计时可以考虑使用序列化(serialization)机制存储系统的对象。
Head First设计模式——中介者模式和备忘录模式的更多相关文章
- 设计模式之第17章-备忘录模式(Java实现)
设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...
- C#设计模式学习笔记:(22)备忘录模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8176974.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第十个模式--备 ...
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
概述: 我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉. ...
- 设计模式20---设计模式之备忘录模式(Memento)(行为型)
1.讲解备忘录模式 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 1.1定义 在不破坏封 ...
- C#设计模式之二十二备忘录模式(Memeto Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第十个模式,该模式是[备忘录模式],英文名称是:Memento Pattern.按老规矩,先从名称上来看看这个模式,个人的最初理解就 ...
- C#设计模式之二十二备忘录模式(Memento Pattern)【行为型】
一.引言 今天我们开始讲“行为型”设计模式的第十个模式,该模式是[备忘录模式],英文名称是:Memento Pattern.按老规矩,先从名称上来看看这个模式,个人的最初理解就是对某个对象的状态进行保 ...
- 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式
[状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...
- Java设计模式(21)——行为模式之备忘录模式(Memento)
一.概述 概念 UML简图 角色 根据下图得到角色 备忘录角色(Memento).发起人角色(Originator).负责人角色(Caretaker) 二.实践 使用白箱实现,给出角色的代码: 发起人 ...
- 【设计模式】行为型07备忘录模式(Memento Pattern)
参考地址:http://www.runoob.com/design-pattern/memento-pattern.html 对原文总结调整,以及修改代码以更清晰的展示: 备忘录模式(快照模式): ...
随机推荐
- Jump Game (Medium)
主要有两种思路: 一. 本题只需要判断能否到达最后一个数,那么可以采用贪心策略,到达某个位置i后,在直接在这个位置的基础上走nums[i]步,主要保证能一直前进,就能达到终点: 那么,什么时候才不能一 ...
- cs231n spring 2017 lecture5 Convolutional Neural Networks
1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...
- python去除列表中重复元素的方法
列表中元素位置的索引用的是L.index 本文实例讲述了Python去除列表中重复元素的方法.分享给大家供大家参考.具体如下: 比较容易记忆的是用内置的set 1 2 3 l1 = ['b','c', ...
- [LC] 150. Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- t-检验
https://wenku.baidu.com/view/3954f9d9a58da0116c17497b.html介绍的挺好的,可以查看~ 应用方面:用于推断差异发生的概率,与f检验,卡方检验并列 ...
- 【转载/部分修改】超实用STL——set的入门使用
本文部分转载自他人博文,少部分自行进行了添改qwq 参考文章:https://blog.csdn.net/chaoyueziji123/article/details/38422211 作者:chao ...
- <JZOJ1329>旅行
贪心大水题 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm& ...
- 如何卸载烦人的2007组件,windows提供的解决方案
如何卸载烦人的2007组件:很恶心人各种软件已经手动删除卸载都无法用,不是cd/dvd找不到就是什么msi文件找不到:对于这种恶心的问题,windows提供了如下解决方案:我使用fixit轻松卸载,很 ...
- Find a way (广度优先搜索)
题目: Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one ...
- Openstack neutron学习
最近在学习openstack neutron的东西,记录下自己的一些理解. 网络基础知识 Switches & Vlan交换机的作用是来连接设备,实现互通的.network host之间通过交 ...