1、基本介绍
对类来说,即一个类应该只负责一项职责。
如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分为A1,A2
2、应用实例
2.1未遵循单一责任原则
在方式1的run方法中,飞机在公路上运行。明显违反了单一责任原则
package com.weirdo.principle.singleResponsibility;
public class SingleResponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("摩托车");
vehicle.run("汽车");
vehicle.run("飞机");
}
//交通工具类
static class Vehicle{
public void run(String vehicle){
System.out.println(vehicle+"在公路上运行...");
}
}
}
2.2遵循单一责任原则(类级)
遵守单一责任原则。
但是这样做改动很大,即将类分写,同时需要修改客户端。
package com.weirdo.singleResponsibility;
public class SingleResponsibility2 {
public static void main(String[] args) {
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("摩托车");
roadVehicle.run("汽车");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飞机");
}
static class RoadVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "在公路上运行...");
}
}
static class AirVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "在天上上运行...");
}
}
}
2.3遵循单一责任原则(方法级)
这种修改方法没有对原来的类做大的修改,只是增加方法。
然没有在类这个级别上遵守单一责任原则,但是在方法级别上仍然是遵守单一责任
package com.weirdo.singleResponsibility;
public class SingleResponsibility3 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.runAir("飞机");
vehicle.runRoad("汽车");
vehicle.runWater("航母");
}
static class Vehicle {
public void runRoad(String vehicle) {
System.out.println(vehicle + "在公路上运行...");
}
public void runAir(String vehicle) {
System.out.println(vehicle + "在公路上运行...");
}
public void runWater(String vehicle) {
System.out.println(vehicle + "在水里运行...");
}
}
}
3、注意事项
- 降低类的复杂都,一个类只负责一项职责
- 提高类的可读性,可维护性
- 通常情况下,应该遵守单一责任原则。只有逻辑足够简单,才可以在代码级违反单一责任原则:只有类中方法数量足够少。可以在方法级别保持单一责任原则