Head-First-设计模式
第一章
开发中的不变真理——CHANGE
设计原则
- 找出应用中可能变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。
这是几乎每个设计模式背后的精神所在。所有的模式都提供栏一套方法让“系统中的某部分改变不会影响到其他部分。”
结果如何?代码变化引起的不经意后果变少,系统变得更有弹性。
- 针对接口编程,而不是针对实现编程。
将鸭子的行为通过接口定义,同一行为的不同表现有不同的实现。这么一来,有了继承的“复用好处”,却没有继承所带来的包袱。
类之间的关系:IS-A, HAS-A, IMPLEMENTS,“有一个”比“是一个”更好。
- 多用组合,少用继承。
软件开发在完成后花费的时间更多,所以要致力于提高可维护性和扩展性。
定义
策略模式定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
继承(is a)–实线三角;实现–虚线三角;有一个–实现箭头;
要点
- 良好的OO设计必须具备可复用、可扩展、可维护三个特性。
继承的缺点
- 代码在多个子类中重复
- 运行时的行为不容易改变
- 很难知道所有子类的全部行为
- 改变会牵一发动全身,造成其他子类不想要的改变。
观察者
装饰器
工厂模式
单例模式
命令模式
设计原则
好莱坞原则
模板方法模式,父类属于高层组件,子类属于底层组件。父类是冲向类,其中有若干具体抽象方法,他们是算法的某部分的具体实现,由子类提供。父类还可以定义钩子,用于控制算法流程。
好莱坞原则是说,高层组件会去调用底层组件的方法,不要反向调用。
这样做的好处是避免环形依赖。解耦,其他代码只依赖高级组件,可以减少整个系统的依赖。
框架中比较多。框架提供模板,实现算法的步骤,细节交给使用者实现。