1. 单一职责原则
尽量让每个类保持单一责任。比如:电视机是用来播放电视的,就不要给它添加切换频道的功能(这应该再定义个遥控器类,并让它有这个能力)
术语“内聚”用来度量类或模块紧密达到单一目的或责任。高内聚:只支持一组相关功能;低内聚:背负有其它无关功能。
设计原则:一个类应该只有一个引起变化的原因。
2. 开放封闭原则
对扩展开放,对修改关闭。
允许对目标类进行扩展,支持新的行为,更强大的能力。避免修改目标类。
示例:使用装饰器模式。
3. 里氏代换原则
接口或父类出现的地方,实现接口的类或子类可以代入。
要保证调用原有父类功能的地方,调用子类不会出现问题(并不关心此时是父类还是子类实例),即子类继承父类时,可以扩展功能,尽量避免重写父类原有功能。
4. 依赖倒置原则
依赖抽象,不要依赖具体类。
避免高层组件依赖低层组件。比如:动物园里有鹦鹉、孔雀。这句话里动物园和鹦鹉、孔雀这些具体类产生了强依赖;如果动物园没了孔雀呢?实际鹦鹉和孔雀应该有个抽象基类--鸟类。动物园是高层组件,鹦鹉等就是低层组件。如果有个抽象鸟类,可以说,动物园有鸟,鸟类有...,这些具体鸟类可以用鸟工厂类来提供具体的鸟类。这时候,高层组件动物园和低层组件(具体的鸟类如鹦鹉等)依赖抽象基类:鸟类。具体鸟实例的构建可以通过鸟工厂类来创造,而动物园类不用再关心有哪些鸟了。
看起来更像“针对接口编程”,这里更强调抽象。
5. 最少知识原则
设计原则:只和你的密友谈话。
低耦合:避免太多的类耦合在一起,只对其中一个功能/类部分代码修改,影响到其它部分。
6. 接口隔离原则
不强制用户依赖他们不使用的接口。
尽量把复杂的接口,拆分成几个单一功能的接口。可以多实现几个接口,尽量避免实现一个复杂的接口。
即设计接口精简单一。
补充. 尽量遵守:针对接口编程,多用组合,少用继承。