遵循原则的目的
代码复用、增加可维护性。
具体原则
1,开闭原则。开放扩展,扩展用子类或抽象类接口在实现类。关闭修改。
开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法。 设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。
扩展时用抽象类或接口定义扩展的范围,引用对象也用抽象类和接口,抽象层尽量保持稳定
2,里氏代换原则。即为了实现开闭,使用继承。如果调用的是父类的话,那么换成子类也完全可以运行。
3,依赖倒转原则。
简单的说就是要求对抽象类或接口进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
当有扩展时,只要新加实现抽象类或接口的实现类即可,不用改以前的代码,增加以前代码的复杂度或把以前的代码改出问题。
4,接口隔离原则。
使用尽量小到实现单一功能的接口,以便实现接口的类不必实现太多功能,另外提高了灵活性
接口不要臃肿,小到实现单一职责就好,同时一个接口提供的方法尽量少,但不能太灵活,太灵活就提高了复杂度。接口尽量高内聚。定制服务。
5,组合(部分不可独立)/聚合(部分可独立)复用原则(Composite/Aggregate Reuse Principle CARP).
组合和聚合都是对象建模中关联(Association)关系的一种。聚合表示整体与部分的关系,表示“含有has a”,整体由部分组合而成,部分可以脱离整体作为一个独立的个体存在。组合则是一种更强的聚合,部分组成整体,而且不可分割,部分不能脱离整体而单独存在,在合成关系中,部分和整体的生命周期一样,组合的新的对象完全支配其组成部分,包括他们的创建和销毁,一个合成关系中成分对象是不能与另外一个合成关系共享。
组合/聚合和继承是实现复用的两个基本途径。合成复用原则是指尽量使用合成/聚合,而不是使用继承。
只有当以下的条件全部被满足时,才应当使用继承关系。
子类是原类的一个特殊种类,也就是区分“Has-A”和“Is-A”.只有“Is-A”关系才符合继承关系,“Has-A”关系应当使用聚合来描述。
子类只属于这个父类,不会出现子类还属于其他父类。即符合子类只能继承自一个父类
子类是扩展父类,而不是替换掉父类。如果一个子类需要大量的置换掉超类的行为,那么这个类就不应该是这个超类的子类。
6,最少知识原则
也叫迪米特法则。不要和陌生人说话,即一个对象应对其他对象有尽可能少的了解。
总结
· 组合优于继承:说的是尽量组合,这比继承好。
· 傻瓜原则:说的是你的类知道的东西越少越好。
· 闭包原则:说的是把相关的类打包到一起。
· 稳定抽象原则:说的是想少改动一个类的话,就尽量用抽象的东西定义它。