《Head First设计模式》 读书笔记17 其余的模式(三) 备忘录 原型 访问者
《Head First设计模式》 读书笔记17 其余的模式(三) 备忘录 原型 访问者
备忘录(Memento Pattern)
当你需要让对象返回之前的状态时(例如,你的用户请求“撤销”),就使用备忘录模式(Memento Pattern) 。
例子场景:游戏存档功能。
使用备忘录模式有两个目标:
1.储存系统关键对象的重要状态。
2.维护关键对象的封装。
请不要忘记单一责任原则,不要把保持状态的工作和关键对象混在一起,这样比较好。这个专门掌握状态的对象,就称为备忘录。
优点:
将被储存的状态放在外面,不要和关键对象混在一起,这可以帮助维护内聚。
保持关键对象的数据封装。
提供了容易实现的恢复能力。
用途:
备忘录用于储存状态。
缺点:
储存和恢复状态的过程可能相当耗时。
在Java系统中,其实可以考虑使用序列化(serialization)机制储存系统的状态。
原型(Prototype Pattern)
当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式(Prototype Pattern) 。
例子场景:交互式角色扮演游戏中的各种怪兽生成,并希望高级用户能够创建自己的怪兽。
原型模式允许你通过复制现有的实例来创建新的实例(在Java中,这意味着使用clone()方法,或者反序列化)。
这个模式的重点在于,客户的代码在不知道要实例化何种特定类的情况下,可以制造出新的实例。
优点:
向客户隐藏制造新实例的复杂性。
提供让客户能够产生未知类型对象的选项。
在某些环境下,复制对象比创建新对象更有效。
用途:
在一个复杂的类层次中,当系统必须从其中的许多类型创建新对象时,可以考虑原型。
缺点:
使用原型模式的缺点:对象的复制有时相当复杂。
访问者(Visitor Pattern)
当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式(Visitor Pattern) 。
例子场景:餐厅顾客询问食物相关的营养信息。
访问者必须参观组合内的每个元素;这样的功能是在导游(Traverser)对象中,访问者通过导游的引导,收集组合中所有对象的状态。
一旦状态被收集了,客户就可以让访问者对状态进行各种操作。
当需要新的功能时,只要加强访问者即可。
优点:
允许你对组合结构加入新的操作,而无需改变结构本身。
想要加入新的操作,相对容易。
访问者所进行的操作,其代码是集中在一起的。
缺点:
当采用访问者模式的时候,就会打破组合类的封装。
因为游走的功能牵涉其中,所以对组合结构的改变就更加困难。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了