名称:单一职责原则(Single Responsibility Principle)
定义:类的职责要单一,不能给单个类太多职责,即一个类应该只负责一项职责。
分析:假如类A负责两个不同职责:职责1、职责2,当职责1需求发生变更改变类A时,可能造成职责2执行错误,所以需要将类A进行拆解为AI、A2。
示例UML:
示例1:违反单一职责原则
public class SingleResponsibility {
public static void main(String[] args) {
// 交通工具
Vehicle vehicle = new Vehicle();
vehicle.run("汽车");
vehicle.run("摩托车");
vehicle.run("船");
}
}
class Vehicle{
public void run(String vehicleName){
System.out.println(vehicleName + "在公路上跑...");
}
}
示例2:类级别遵循单一职责原则
public class SingleResponsibility {
public static void main(String[] args) {
// 公路上的交通工具
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("汽车");
roadVehicle.run("摩托车");
// 水上的交通工具
WaterVehicle waterVehicle = new WaterVehicle();
waterVehicle.run("船");
waterVehicle.run("鱼");
}
}
class RoadVehicle{
public void run(String vehicleName){
System.out.println(vehicleName + "在公路上跑...");
}
}
class WaterVehicle{
public void run(String vehicleName){
System.out.println(vehicleName + "在水中游...");
}
}
示例3:方法级别遵循单一职责原则
public class SingleResponsibility {
public static void main(String[] args) {
AllVehicle allVehicle = new AllVehicle();
allVehicle.run("汽车");
allVehicle.run("摩托车");
allVehicle.swim("船");
allVehicle.swim("鱼");
}
}
class AllVehicle{
public void run(String vehicleName){
System.out.println(vehicleName + "在公路上跑...");
}
public void swim(String vehicleName){
System.out.println(vehicleName + "在水中游...");
}
}
注意事项:
- 降低类的复杂度,一个类只负责一项职责;
- 提高类的可读性,可维护性;
- 降低需求变更而修改类引起的风险;
- 一般情况下,应该遵守单一职责原则。只有逻辑非常简单时,才可以在代码级别违反单一职责原则;只有类中方法数量足够少时,才可以在方法级别保持单一职责原则。