抽象化和继承关系使概念和定义可以复用;多态性使实现和应用可以复用;
开闭原则(Open-Closed Principle OCP)一个软件实体应当对扩展开放,对修改封闭。
对可变性的封装原则(Principle of Encapsulation of Variation) (1)一种变化性不和另一种混合在一起 (2)一种可变性不应散落在代码的很多地方。
里氏代换原则(Liskov Substitution Principle):任何基类出现的地方,子类一定可以出现。
依赖倒转原则(Dependence Inversion):要依赖于抽象,不要依赖于实现。
组合/聚合复用原则( Composite/Aggregate Reuse Principle):尽可能使用组合/聚合,而不是继承关系。
迪米特法则:一个软件实体应尽可能少地和其他软件实体发生关系。
接口隔离原则(Interface Segregation Principle):向客户端提供尽可能小的独立的接口,而不是大的总接口。
Coad原则,什么时候使用继承复用?
(1)子类是超类的一个特殊种类,不是超类的一个角色,区分Is-a,Has-a
(2)子类扩展超类职责,而不是换掉。
(3)永远不会出现需要将子类换成另一个类的子类的情况。
(4)只用分类学上有意义时,才使用继承,不要从工具类继承。
几个工厂模式解决对象创建过程中的依赖倒转原则。
抽象类的用途:
(1)具体类不是用来继承的,尽量从抽象类继承。
(2)抽象类拥有尽可能多的代码和尽可能少的数据