合成/聚合复用原则

  1. 合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。

单一职责原则(Single Responsibility Principle)

定义:就一个类而言, 应该仅有一个引起它变化的原因。

单一职责的划分界限并不是那么清晰,很多时候需要靠个人经验界定。当然最大的问题就是对职责的定义,什么是类的职责,以及怎么划分类的职责。

开放封闭原则(Open Close Principle)

定义:类、模块、函数等应该是可以拓展的,但是不可修改。

开闭原则指导我们,当软件需要变化时,应该尽量通过拓展的方式来实现变化,而不是通过修改已有代码来实现。这里的“应该尽量”4个字说明OCP原则并不是说绝对不可以修改原始类的。

里氏替换原则(Liskov Substitution Principle)

定义:所有引用基类的地方必须能透明地使用其子类的对象。

里氏替换原则是开闭原则的具体实现手段之一,它的核心原理是抽象,抽象又依赖于继承这个特性, 开闭原则和里氏替换原则是相辅相成的,通过里氏替换来达到对扩展的开发,对修改的关闭效果。

  • 迪米特法则
  • 开放封闭原则
  • 依赖倒转原则

    依赖倒置原则(Dependence Inversion Principle)

    定义:高层模块不应该依赖于低层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

java中抽象指接口或抽象类,两者都不能直接被实例化的;细节就是实现类,实现接口或者集成抽象类而产生的也就细节,也就是可以加上关键字new产生的对象。高层模块就是调用端,低层模块就是具体实现类。依赖倒置原则在java中表现就是,模块间依赖通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者抽象类产生的。如果类与类直接依赖细节,那么就会直接耦合。如此一来当修改时,就会同时修改依赖者代码,这样限制了可拓展性。

迪米特原则(Law of Demeter)/最少知识原则

定义:一个软件实体应当尽可能少地与其他实体发生相互作用。

(1)在类的划分上,应当尽量创建松耦合的类。类之间的耦合度约低,就越有利于使用。一个处于松耦合中的类一旦被修改,则不会对关联的类造成太大的波及。 (2)在类的结构设计上, 每一个类都应当尽量降低其成员变量和成员函数的访问权限。 (3)在对其他类的引用上, 一个类对其他对象的引用应当降到最低。