设计模式可提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性。设计七原则是软件设计所遵循的一种基础原则。
一、开闭原则(OCP,Open-Closed Principle)
对扩展开放,对修改关闭。强调用抽象构建框架用细节扩展实现,提供系统的可复用性和可维护性。是软件设计中最基础的原则。
二、依赖倒置原则(DIP,Dependence Inversion Principle)
设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。
通过依赖倒置可以减少耦合,提高代码的可读性和可维护性。
在代码中可理解为:具体实现类 实现接口,通过面向接口编程,来达到解耦的目的
public interface Calculate {
int result(int num1, int num2);
}
public class AddCalculate implements Calculate {
public int result(int num1, int num2) {
return num1 + num2;
}
}
Calculate calculate=new AddCalculate();
calculate.result(1,2);
三、单一职责(SRP,Simple Responsibility Principle)
不要存在一个导致类(方法、接口)变更的原因。如果有多个原因则可以拆分出多个类。后期需求变更维护方便,互不影响。
四、接口隔离(ISP,Interface Segregation Principle)
用多个专门的接口,而不使用单一的总接口,实现类只需要依赖它所需要的接口,不需要的则不应该依赖。ISP 符合高内聚,低耦合的思想。
- 一个类对另外的一个类的依赖应该建立在最小的接口之上
- 建立单一的接口不要建立总接口
- 细化接口,接口方法数量适中
五、迪米特原则(LoD,Law of Demeter)
LoD 又叫最少知道法则,是指一个对象应该对其它对象保持最少的了解。
如果两个类无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。(只和朋友说话,不和陌生人说话。出现在成员变量、方法参数输入输出中的类都可以当做朋友,而出现在方法体内部的类不属于朋友类)
六、里氏替换原则(LSP,Liskov Substitution Principle)
里氏替换原则是实现开闭原则的重要方式之一。一个类如果适用于一个父类那么一定也适用于其子类,引用父类的地方必须透明的使用其子类的对象,子类替换父类且程序逻辑不变。
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
- 子类可以增加自己特有的方法
- 子类重载父类方法时,方法的前置条件(参数)要比父类的前置条件更宽松
- 子类重载父类方法时,方法的后置条件(参数)要比父类的后置条件更严格
- 约束继承泛滥
- 加强程序健壮性
七、合成复用原则(CARP,Composite/Aggregate Reuse Principle)
指尽量使用对象组合(has-a)/聚合而不是通过继承关系达到软件复用的目的。可以使软件更加灵活,降低耦合。