博客
关于我
Head First设计模式——中介者模式和备忘录模式
阅读量:405 次
发布时间:2019-03-06

本文共 1073 字,大约阅读时间需要 3 分钟。

中介者

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

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

 

 

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

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

 

 

设计类图:

1) Mediator 抽象中介者

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

 优点:

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

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

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

用途和缺点

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

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

备忘录

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

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

备忘录模式有两个目标:

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

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

设计类图:

 优点:

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

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

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

用途和缺点:

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

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

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

转载地址:http://eqbkz.baihongyu.com/

你可能感兴趣的文章
ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)...
查看>>
image unity 原始尺寸_Unity基础教程-对象管理(十一)——生命周期(Growth and Death)...
查看>>
iphone打字怎么换行_手持iPhone?你可能并不知道的小技巧!
查看>>
jaccard相似度_自然语言处理之文本相似度计算
查看>>
java http delete_java积累---HttpDelete请求方式传递参数
查看>>
java swing数据库,如何在Java swing中查看数据库结果集
查看>>
java xmpp 群聊,使用XMPPFramework openfire创建聊天室
查看>>
java 反义_java中一些常用的英语
查看>>
java 命令行 class_如何从命令行执行java .class
查看>>
java 字符编码过滤器_java web中字符编码的过滤器(Filter - 1)
查看>>
java 线程 栈_Java线程堆栈分析
查看>>
#NOIP前数学知识总结
查看>>
java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
查看>>
java序列化_java对象的序列化和反序列化
查看>>
java开发区块链_用Java代码实现区块链
查看>>
java快捷键eclipse_eclipse的设置和一些快捷键
查看>>
java拼车平台(ssm框架毕业设计)
查看>>
Java指定区间返回随机数
查看>>
Java推动老年人社区服务(毕设源码+mysql+lw)
查看>>
Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
查看>>