Head-First-设计模式

第一章 #

开发中的不变真理——CHANGE

设计原则 #

  1. 找出应用中可能变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。

这是几乎每个设计模式背后的精神所在。所有的模式都提供栏一套方法让“系统中的某部分改变不会影响到其他部分。”

结果如何?代码变化引起的不经意后果变少,系统变得更有弹性。

  1. 针对接口编程,而不是针对实现编程。

将鸭子的行为通过接口定义,同一行为的不同表现有不同的实现。这么一来,有了继承的“复用好处”,却没有继承所带来的包袱。

类之间的关系:IS-A, HAS-A, IMPLEMENTS,“有一个”比“是一个”更好。

  1. 多用组合,少用继承。

软件开发在完成后花费的时间更多,所以要致力于提高可维护性和扩展性。

定义 #

策略模式定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

继承(is a)--实线三角;实现--虚线三角;有一个--实现箭头;

要点 #

  • 良好的OO设计必须具备可复用、可扩展、可维护三个特性。

继承的缺点 #

  1. 代码在多个子类中重复
  2. 运行时的行为不容易改变
  3. 很难知道所有子类的全部行为
  4. 改变会牵一发动全身,造成其他子类不想要的改变。

观察者 #

装饰器 #

工厂模式 #

单例模式 #

命令模式 #

设计原则 #

好莱坞原则 #

模板方法模式,父类属于高层组件,子类属于底层组件。父类是冲向类,其中有若干具体抽象方法,他们是算法的某部分的具体实现,由子类提供。父类还可以定义钩子,用于控制算法流程。

好莱坞原则是说,高层组件会去调用底层组件的方法,不要反向调用。

这样做的好处是避免环形依赖。解耦,其他代码只依赖高级组件,可以减少整个系统的依赖。

框架中比较多。框架提供模板,实现算法的步骤,细节交给使用者实现。