设计模式-要点(9-10) | 青训营笔记

67 阅读2分钟

前言

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

这几天过年放假没有新的课程,闲来无事我就决定看看一直久仰大名的设计模式(虽然Go连类都没有),看的书是《Head First 设计模式》,记录一些书中的要点。

第九章要点(迭代器&组合模式-Iterator&Composite)

  • 迭代器允许访问聚合的元素,而不需要暴露它的内部结构。
  • 迭代器将遍历聚合的工作封装进一个对象中。
  • 当使用迭代器的时候,我们依赖聚合提供遍历。
  • 迭代器提供了一个通用的接口,让我们遍历聚合的项,当我们编码使用聚合的项时,就可以使用多态机制。
  • 我们应该努力让一个类只分配一个责任。
  • 组合模式提供一个结构,可同时包容个别对象和组合对象。
  • 组合模式允许客户对个别对象以及组合对象一视同仁。
  • 组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点。
  • 在实现组合模式时,有许多设计上的折衷。你要根据需要平衡透明性和安全性。

迭代器模式: 提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露其内部的表示。
组合模式: 允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和组合。

第十章要点(状态模式-State)

  • 状态模式允许一个对象基于内部状态而拥有不同的行为。
  • 和程序状态机(PSM)不同,状态模式用类代表状态。
  • Context会将行为委托给当前状态对象。
  • 通过将每个状态封装进一个类,我们把以后需要做的任何改变局部化了。
  • 状态模式和策略模式有相同的类图,但是它们的意图不同。
  • 策略模式通常会用行为或算法来配置Context类。
  • 状态模式允许Context随着状态的改变而改变行为。
  • 状态转换可以由State类或Context类控制。
  • 使用状态模式通常会导致设计中类的数目大量增加。
  • 状态类可以被多个Context实例共享。

状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。