设计模式-要点(1-2) | 青训营笔记

79 阅读3分钟

0 前言

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

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

00 一些设计原则

  1. 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
  2. 针对接口编程而不是针对实现编程
  3. 多用组合,少用继承
  4. 为了交互对象之间的松耦合设计而努力
  5. 类应该对拓展开发,对修改关闭

第一章要点(策略模式-Strategy)

  • 知道OO基础,并不只有让你设计出良好的OO系统。
  • 良好的OO设计必须具备可复用、可扩充、可维护三个特性。
  • 模式可以让我们建造出具有良好OO设计质量的系统。
  • 模式被认为是历经验证的OO设计经验。
  • 模式不是代码,而是针对设计问题的通用解决方案。你可把它们应用到特定的应用中。
  • 模式不是被发明,而是被发现。
  • 大多数的模式和原则,都着眼于软件变化的主题。
  • 大多数的模式都允许系统局部改变独立于其他部分。
  • 我们常把系统中会变化的部分抽出来封装。
  • 模式让开发人员之间有共享的语言,能够最大化沟通的价值。

第二章要点(观察者模式-Oberserver)

  • 观察者模式定义了对象之间一对多的关系。
  • 主题(也就是可观察者)用一个共同的接口来更新观察者
  • 观察者和可观察者之间用松耦合方式结合(loosecoupling),可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
  • 使用此模式时,你可从被观察者处推(push)或拉(pull)数据(然而,推的方式被认为更“正确”)。
  • 有多个观察者时,不可以依赖特定的通知次序。
  • Java有多种观察者模式的实现,包括了通用的java.util.Observable。
  • 要注意java.util.Observable实现上所带来的一些问题
  • 如果有必要的话,可以实现自己的Observable,这并不难,不要害怕。
  • Swing大量使用观察者模式,许多GUI框架也是如此。
  • 此模式也被应用在许多地方,例如:JavaBeans、RMl。

策略模式(Strategy)

策略模式定义了算法族,分别封装起来,让他们可以相互替换,此模式让算法的变化独立于使用算法的客户,例如:
设计一个 Duck 类,可以将 Duck 的 FlyQuack 都抽象成一个接口独立出来,用组合而不是继承的方式去让部分类获得特定的能力,用不同的接口实现去使得不同的类的相同接口也可以实现不同的效果

image.png