单一职责,里氏替换,依赖倒置,接口隔离,迪米特法则,开闭原则
参考:
一个类只负责一个明确的功能
优点:
原则一:若 o1 是 C1 的一个实例化对象, o2 是 C2 的一个实例化对象,如果在使用 C1 的程序中将o1 替换为 o2 而程序行为没有发生变化,那么 C2 应该是 C1 的子类。
原则二:所有用到基类对象的地方,如果把基类对象替换成子类对象,程序行为不应该发生变化。
实现方法:
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
比如手机(Phone)依赖CPU,那么 Phone 就是一个高层模块, CPU 就是一的低层模块,Phone 显然不应该依赖一个具体的低层模块(如 Qualcomm865):
public class Phone {
private Qualcomm cpu;
Phone(){
this.cpu = new Qualcomm();
}
public void printConfig(){
System.out.println("cpu is" + this.cpu);
}
}
不管是高通还是麒麟,都应该抽象为一个CPU类,然后各自实现,高层模块只依赖于抽象的低层模块。
实现方法:
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 使用多个隔离的接口,比使用单个接口要好.
一个对象应该对其他对象保持最少的了解。
高内聚,低耦合
对拓展开放,对修改封闭:当系统变化时,尽量通过拓展来实现变化,而不是去修改原有代码;