博客
关于我
《Head First设计模式》 读书笔记17 其余的模式(三) 备忘录 原型 访问者
阅读量:434 次
发布时间:2019-03-06

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

 

《Head First设计模式》 读书笔记17 其余的模式(三) 备忘录 原型 访问者

 

备忘录(Memento Pattern)

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

例子场景:游戏存档功能。

  使用备忘录模式有两个目标:

  1.储存系统关键对象的重要状态。

  2.维护关键对象的封装。

  请不要忘记单一责任原则,不要把保持状态的工作和关键对象混在一起,这样比较好。这个专门掌握状态的对象,就称为备忘录。

优点:

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

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

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

用途:

  备忘录用于储存状态。

缺点:

  储存和恢复状态的过程可能相当耗时。

  在Java系统中,其实可以考虑使用序列化(serialization)机制储存系统的状态。

 

原型(Prototype Pattern)

  当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式(Prototype Pattern)

例子场景:交互式角色扮演游戏中的各种怪兽生成,并希望高级用户能够创建自己的怪兽。

  原型模式允许你通过复制现有的实例来创建新的实例(在Java中,这意味着使用clone()方法,或者反序列化)。

  这个模式的重点在于,客户的代码在不知道要实例化何种特定类的情况下,可以制造出新的实例。

    

优点:

  向客户隐藏制造新实例的复杂性。

  提供让客户能够产生未知类型对象的选项。

  在某些环境下,复制对象比创建新对象更有效。

用途:

  在一个复杂的类层次中,当系统必须从其中的许多类型创建新对象时,可以考虑原型。

缺点:

  使用原型模式的缺点:对象的复制有时相当复杂。

 

访问者(Visitor Pattern)

  当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式(Visitor Pattern)

例子场景:餐厅顾客询问食物相关的营养信息。

  访问者必须参观组合内的每个元素;这样的功能是在导游(Traverser)对象中,访问者通过导游的引导,收集组合中所有对象的状态。

  一旦状态被收集了,客户就可以让访问者对状态进行各种操作。

  当需要新的功能时,只要加强访问者即可。

  

 

优点:

  允许你对组合结构加入新的操作,而无需改变结构本身。

  想要加入新的操作,相对容易。

  访问者所进行的操作,其代码是集中在一起的。

缺点:

  当采用访问者模式的时候,就会打破组合类的封装。

  因为游走的功能牵涉其中,所以对组合结构的改变就更加困难。

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

你可能感兴趣的文章
缓冲区溢出实例(一)–Windows
查看>>
powershell渗透-信息收集命令
查看>>
关于级联(树形权限)的基本实现思路
查看>>
如何使用Exchange Web Service Managed API获取公共文件夹日历(包括循环会议)
查看>>
KMP算法详解
查看>>
Badboy录制脚本时,提示脚本错误的解决方法
查看>>
PHP一句话木马小总结与SQL语句写一句话木马
查看>>
Web 安全之内容安全策略(Content-Security-Policy,CSP)详解
查看>>
单向链表
查看>>
堆与堆排序
查看>>
关于计数排序
查看>>
使用 C# 9 的records作为强类型ID - 初次使用
查看>>
CentOS Too Many Open Files 解决
查看>>
移除 DevExpress 的 XtraForm 标题文字阴影
查看>>
【进阶之路】并发编程(三)-非阻塞同步机制
查看>>
分布式图数据库 Nebula Graph 中的集群快照实践
查看>>
Python3获取新浪微博内容乱码问题
查看>>
详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
查看>>
移动开发中单页异步加载所有列表项
查看>>
Newbe.Claptrap 框架入门,第一步 —— 开发环境准备
查看>>