分类
创建型(Creational)、结构型(Structural)、行为型(Behavioral)
要点
- 好的面向对象设计——应对变化、提高复用
- 在变化点处应用设计模式
- 重构关键技法 静态-->动态
早绑定-->晚绑定
继承-->组合
编译时依赖-->运行时依赖
紧耦合-->松耦合
- 设计模式应用的前提是至少要有一个稳定点,也至少要有一个变化点。设计模式最大的作用就是在稳定和变化中寻找隔离点,然后分离它们,从而来管理变化。
里氏替换原则
里氏替换原则(Liskov Substitution Principle,LSP)的含义是:要保证子类能“无害地”替换基类。
类B派生自类A,现在,把程序中所有A类实例都换成B类实例,同时使得所有A类指针都指向B类实例,若此时程序仍然能够运行且不发生逻辑错误(如不会由做加法变成做减法),则称B对A的扩展满足里氏替换原则。
里氏替换原则不仅是对子类的约束,也是对父类的约束。那就是:父类尽量不要改动,即使不得已要改动,也要保证能兼容所有子类(即可以被任何子类所代替)。例如,父类A(如超级英雄类)中方法foo用来计算角色武力值,子类B(如蝙蝠侠类)用来计算蝙蝠侠的武力值。现在,把父类A的foo方法改为计算角色的生命值。此时,子类B不能代替父类A,因为B.foo用来计算武力值,不能用来计算生命值(即此时A.foo的功能)。