其他设计模式 23种设计模式(C++)

每一种都有对应理解的相关代码示例 → Git原码

状态变化

在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“模块变化”模式为这以问题提供了一种解决方案。

Memento 备忘录

存储保存状态 待恢复 类似撤回 现在看来有些过时

动机(Motivation)

  • 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于的某个点时的状态。如果使用一些共有接口来让其他对象得到对象的装填,便会暴露对象的细节实现。
  • 如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。

模式定义

​ 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 ——《设计模式》GoF

结构(Structure)

要点总结

  • 备忘录(Memento)存储原发器(Originator)对象的内部状态,在需要时恢复原发器状态。
  • Memento模式的核心是信息隐藏,即Originator需要向外接隐藏信息,保持其封装性。但同时又需要将状态保持到外界(Memento)。
  • 由于现代语言运行时(C#、Java等)都具有相当的对象序列化支持,淫才往往采用效率较高、又较容易正确实现的序列化方案来实现Memento模式。

State

有些类似 Strategy 模式

动机(Motivation)

  • 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如稳当处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。
  • 如何在运行时根据对象的状态来透明更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?

模式定义

允许一个对象在其内部状态改变时改变他的行为。从而使对象看起来似乎修改了其行为。 ——《设计模式》GoF

结构(Structure)

要点总结

  • State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的耦合。
  • 为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转换是原子性的——即要么彻底转换过来,要么不转换。
  • 如果State对象没有实例变量,那么各个上下文可以共享同一个State对象,从而节省对象开销。

最新文章

  1. 彻底弄明白之数据结构中的KMP算法
  2. junit基础篇、中级篇-实例代码
  3. Oracle Ebs R12 SLA与GL关系变化
  4. redis pool
  5. Archiving
  6. 自定的TableView
  7. WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
  8. 一个想法照进现实-《IT连》创业项目:聊聊IT连App是如何思考解决IT人员单身问题的
  9. leftBarButtonItem 的颜色
  10. QQ群成员发言次数统计(词云制作)
  11. JavaCV 学习(二):使用 JavaCV + FFmpeg 制作拉流播放器
  12. linux http服务源码编译安装详解
  13. Gym 101873I - Uberwatch - [DP]
  14. PBFT(拜占庭容错)简述
  15. day01计算机组成与操作系统
  16. 对象的释放Dispose和Close对比
  17. Mac OSX 快捷键&命令行
  18. bash(3):遍历文件
  19. css布局 - 常规上中下分左右布局的一百种实现方法(更新中...)
  20. Spring Cloud项目启动脚本

热门文章

  1. PDOStatement::columnCount
  2. PHP addcslashes() 函数
  3. Error:java:错误:不支持发行版本 5(或写着其他版本的~)
  4. Linux的VMWare中Centos7文件查找(find-grep)和vim文本编辑器基操
  5. 银弹谷零代码开发V百科|使用技巧:OMG!这些时间日期函数太好用了吧,盘它
  6. 18 . Go之操作Mysql
  7. Dropzone.js文件拖拽上传提示Dropzone already attached 解决
  8. Serverless无服务器架构详解
  9. day23:单继承&多继承&菱形继承&__init__魔术方法
  10. 3、Java 对象和类