官方定义
单一职责原则(Single Responsibility Pronciple,SRP),有且仅有一个原因引起类的变化
顾名思义:一个类值负责一项职责。如类A负责连个不同的职责:职责1和职责2,当职责1需求变更二改变A时,可能会造成职责2执行错误,所以需要将类A的粒度分解为A1和A2
package danyisheji;
public class Animal {
public static void main(String[] args) {
new ForestAnimal().run("狮子");
new AirAnimal().fly("老鹰");
}
}
class ForestAnimal {
public void run(String animal) {
System.out.println(animal + "在森林中愉快地奔跑");
}
}
class AirAnimal {
public void fly(String animal) {
System.out.println(animal + "在天空中愉快地飞翔");
}
}
优势: 符合了业务逻辑,符合翻译职责原理劣势:改动幅度大,不光是要拆分类,客户端的代码也要进行大幅度的改动
解决方法二:
直接在原有类的基础上进行修改
package danyisheji;
public class Animal {
public static void main(String[] args) {
new animal().runForest("狮子");
new animal().fly("老鹰");
}
}
class animal{
public void runForest(String animal){
System.out.println(animal + "在森林中愉快地奔跑");
}
public void fly(String animal){
System.out.println(animal + "在天空中愉快地飞翔");
}
}
优势:改动幅度小,包括客户端,完成了业务逻辑劣势:是否违反了单一职责原则?(方法级别的遵守)
单一职责原则:各司其职
注意事项和原则
- 降低类的复杂度,一个类只负责一项职责(一个类职责少了,相应的复杂度低了)
- 提高类的可读性以及课维护性(相应的复杂度降低了,代码量就会减少,可读性也就提高了,课维护性自然也就提高了)
- 降低变更引起的风险(一个类职责越多,变更的可能性就会越大,变化带来的风险也就会越大)
- 通常情况下,我们应该遵守单一职责原则(只有逻辑足够简单,才可以在代码中违反单一职责原则)
如何遵守单一执行原则
其实就是合理的职责分解,从业务出发,从需求出发,识别出同一个类型的职责
需要说明一点,单一职责原则不是面向对象语言特有的,只要是模块化的程序设计,都要遵守。