-
单一职责原则
核心思想为:一个类,最好只做一件事,只有一个引起它的变化。
例如:将计算器抽象为类,将运算数值和运算方法抽象为状态和行为(即属性和方法)。
public class JiSuanQi { int a; int b; //有参构造 public JiSuanQi(int a, int b) { this.a = a; this.b = b; } //加法 public int add(int a, int b) { return a + b; } //减法 public int sub(int a, int b) { return a - b; } }
但这种写法却没有很好的按照单一职责的原则去构建,计算器不仅有加法、减法,还有乘法、除法,倘若后续要加上乘法、除法,那就要在原来的类中进行改动,添加这两个方法,但如果按照单一职责原则,一个类专注做一件事,对上一个类进行拆分,例如:
加法类AddJiSuanQi
public class AddJiSuanQi extends JiSuanQi{ public AddJiSuanQi(int a, int b) { super(a, b); } //加法 public int AddJiSuanQi(int a, int b) { return a+b; } }
减法类SubJiSuanQi
public class SubJiSuanQi extends JiSuanQi{ public SubJiSuanQi(int a, int b) { super(a, b); } //减法 public int SubJiSuanQi(int a, int b) { return a-b; } }
通过将加法、减法分别抽象成单一的类,如果后续还要加乘法、除法功能,只需再新添这两个类,而不需要在原有类中进行改动。
总结:通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。
-
开放封闭原则
核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭。
总结:“需求总是变化”没有不变的软件,所以就需要用封闭开放原则来封闭变化满足需求,同时还能保持软件内部的封装体系稳定,不被需求的变化影响。
-
里氏替换原则
核心思想是:子类对象能够替换父类对象,而程序逻辑不变。
总结:里氏替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。
-
依赖倒置原则
其核心思想是:依赖于抽象。
将耦合紧密的两个模块进行分离接口和实现,主要依赖于接口编程。
总结:依赖于抽象,就是对接口编程,不要对实现编程。
-
接口隔离原则
核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。
使用臃肿的接口,会造成实现类实现接口的所有方法,不管是它需要的还是不需要的,造成接口污染。
接口污染是指把接口做的过于“胖”,派生类必须实现某些它用不到的功能,这样不仅加大了接口间的耦合,而且带来不必要的复杂性,造成接口污染。
总结:遵守接口隔离原则,将“胖”接口拆分为独立的几个接口,各实现类分别与需要的接口类来建立依赖关系。