单一职责原则(Single Responsibility Principle)
定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
里氏替换原则(Liskov Substitution Principle)
子类可以扩展父类的功能,但不能改变父类原有的功能。
依赖倒置原则(Dependence Inversion Principle)
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
接口隔离原则(Interface Segregation Principle)
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
迪米特法则(Law Of Demeter)
定义:一个对象应该对其他对象保持最少的了解。
迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。迪米特法则还有一个更简单的定义:只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
下面的代码在方法体内部依赖了其他类,这严重违反迪米特法则
publicclassTeacher {
publicvoidcommond(GroupLeader groupLeader) {
List listGirls =newArrayList();
for(inti =0; i <20; i++) {
listGirls.add(newGirl()); //这句有问题
}
groupLeader.countGirls(listGirls);
}
}
方法是类的一个行为,类竟然不知道自己的行为与其他类产生了依赖关系,这是不允许的。
正确的做法是:
publicclassTeacher {
public void commond(GroupLeader groupLeader) {
groupLeader.countGirls();
}
}
publicclassGroupLeader {
privateList listGirls;
publicGroupLeader(List _listGirls) {
this.listGirls = _listGirls;
}
public void countGirls() {
System.out.println("女生数量是:"+ listGirls.size());
}
}
开闭原则(Open Close Principle)
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。