1、描述
一个类(方法)只负责一个功能领域中的相应职责; 就一个类而言,应该只有一个引起它变化的原因。
2、特点
- 一个类不能太“累”;
- 复用性高;
- 高内聚、低耦合。
3、优点
- 降低类的复杂度,一个类只负责一个职责,代码逻辑简单清晰;
- 提高类的可读性,提高系统的可维护性;
- 降低变更引起的风险。变更是必然的,如果单一职责原则遵守得好,当修改一个功能的时候可以显著降低对其他功能的影响。
4、注意
需要说明的一点是,单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。比如说单一职责原则不仅仅适用于类,还适用于方法。 通常情况下,都应当遵守单依职责原则,只有逻辑足够简单,才可以违反代码的单一职责原则:只有类中的方法足够少,可以在方法级别保持单一职责原则
5、示例
public class Animal {
public void walk(String animalName) {
System.out.println(animalName + "会走");
}
public void fly(String animalName) {
System.out.println(animalName + "会飞");
}
public void swim(String animalName) {
System.out.println(animalName + "会游泳");
}
}
人是动物,但是人不会飞,这个fly的方法多余;
鸟也是动物,会飞,也不会游泳,所以swim和fly的方法多余;
鱼也是动物,会游泳,但不会走,也不会非,所以walk和swim的方法多余;
所以Animal这样写明显违反了单一职责原则;
现将这些行为明确分配到各自的活动:
public class Person {
public void walk() {
System.out.println(animalName + "会走");
}
}
public class Bird {
public void fly() {
System.out.println(animalName + "会飞");
}
}
public class Fish {
public void swim() {
System.out.println(animalName + "会游泳");
}
}