我们平时编写代码时,很少有人为了刻意迎合软件设计原则而编写。其实,有时候是你用到了其中的某个或多个设计原则,而不自知而已。也有可能是有的人压根就不知道设计原则是什么。
不过,没关系,为了搞明白既抽象又玄幻的六大准则,我总结了一句话来概括每一种设计原则所体现的主要思想。
里氏替换原则是指继承时不要破坏父类原有的功能;依赖倒置原则是指要面向接口编程;开闭原则是指对扩展是开放的,对修改是关闭的;职责单一原则是指实现类的职责要单一;接口隔离原则是指设计的接口要尽量简单,专一;迪米特法则是指要降低类之间的耦合度。
下面一一介绍六大类设计原则,看完之后,你会对上边的总结有更深的理解。
一、里氏替换原则
里氏替换原则,乍一看名字,让人摸不着头脑。其实,这是一位姓里的女士提出来的,因此用她的姓氏命名。里氏替换原则,通俗来讲,就是指子类继承父类时,可以扩展父类的功能,但是不要修改父类原有的功能。什么意思呢,举个例子。
//父类
public class Calculate {
public int cal(int a,int b){
return a + b;
}
}
//子类
public class Calculate2 extends Calculate {
public int cal(int a,int b){
return a - b;
}
}
//测试
public class TestCal {
public static void main(String[] args) {
Calculate2 cal2 = new Calculate2();
int res = cal2.cal(1, 1);
System.out.println("1 +1=" res); // 1 +1 = 0
}
}
子类继承了父类之后,想实现新功能,却没有扩展新方法,而是重写了父类的cal方法,因此导致结果 1 +1=0. 这就违反了里氏替换原则。
应该把子类Calculate2修改为,添加一个新方法cal2来实现相减功能
public class Calculate2 extends Calculate {
public int cal2(int a, int b){
return a - b;
}
}
public class TestCal {
public static void main(String[] args) {
Calculate2 cal2 = new Calculate2();
int res = cal2.cal2(1, 1);
System.out.println("1-1=" res); // 1-1=0
}
}
有心的人可能会发现,里氏替换原则规定子类不