1. 单一职责原则

        尽量让每个类保持单一责任。比如:电视机是用来播放电视的,就不要给它添加切换频道的功能(这应该再定义个遥控器类,并让它有这个能力)

        术语“内聚”用来度量类或模块紧密达到单一目的或责任。高内聚:只支持一组相关功能;低内聚:背负有其它无关功能。

        设计原则:一个类应该只有一个引起变化的原因。

2. 开放封闭原则

        对扩展开放,对修改关闭。

       允许对目标类进行扩展,支持新的行为,更强大的能力。避免修改目标类。

       示例:使用装饰器模式。

3. 里氏代换原则

        接口或父类出现的地方,实现接口的类或子类可以代入。

       要保证调用原有父类功能的地方,调用子类不会出现问题(并不关心此时是父类还是子类实例),即子类继承父类时,可以扩展功能,尽量避免重写父类原有功能。

4. 依赖倒置原则

        依赖抽象,不要依赖具体类。

        避免高层组件依赖低层组件。比如:动物园里有鹦鹉、孔雀。这句话里动物园和鹦鹉、孔雀这些具体类产生了强依赖;如果动物园没了孔雀呢?实际鹦鹉和孔雀应该有个抽象基类--鸟类。动物园是高层组件,鹦鹉等就是低层组件。如果有个抽象鸟类,可以说,动物园有鸟,鸟类有...,这些具体鸟类可以用鸟工厂类来提供具体的鸟类。这时候,高层组件动物园和低层组件(具体的鸟类如鹦鹉等)依赖抽象基类:鸟类。具体鸟实例的构建可以通过鸟工厂类来创造,而动物园类不用再关心有哪些鸟了。

        看起来更像“针对接口编程”,这里更强调抽象。

5. 最少知识原则

        设计原则:只和你的密友谈话。

        低耦合:避免太多的类耦合在一起,只对其中一个功能/类部分代码修改,影响到其它部分。

6. 接口隔离原则

        不强制用户依赖他们不使用的接口。

        尽量把复杂的接口,拆分成几个单一功能的接口。可以多实现几个接口,尽量避免实现一个复杂的接口。

        即设计接口精简单一。

补充. 尽量遵守:针对接口编程,多用组合,少用继承。