单一职责原则
基本介绍
对类来说,一个类应该只负责一项职责。如类A负责两个不同的职责:职责1,职责2.当职责1需求变更时,可能造成职责2执行错误。因此,需要将类A的粒度分解为A1,A2。
案例说明
package pers.lasting.principle.single;
/**
*
* @author Lasting E-mail:abc1120259135@qq.com
*
* @version 2019年12月23日-下午12:44:01
*/
public class SingleResponsibility {
public static void main(String[] args) {
System.out.println("案例演示:");
Vehicle vehicle = new Vehicle();
vehicle.run("摩托车");
vehicle.run("轮船");
vehicle.run("飞机");
System.out.println("\n解决方案:");
RoadVehicle roadVehicle = new RoadVehicle();
WaterVehicle waterVehicle = new WaterVehicle();
AirVehicle airVehicle = new AirVehicle();
roadVehicle.run("摩托车");
waterVehicle.run("轮船");
airVehicle.run("飞机");
}
}
//交通工具类
//1.这里的run方法违反了单一职责原则
//2.我们应该根据不同的运行方式,分解成为不用的类
class Vehicle{
public void run(String vehicle) {
System.out.println(vehicle+"在公路上运行...");
}
}
//解决方案:
//1.遵守了单一职责的原则
//2.改动过很大,同时修改了客户端
//3.可以直接修改Vehicle类,但是如此修改就只是在方法的级别上遵守了单一职责原则
class RoadVehicle{
public void run(String vehicle) {
System.out.println(vehicle + "在公路上运行...");
}
}
class AirVehicle{
public void run(String vehicle) {
System.out.println(vehicle + "在天空中运行...");
}
}
class WaterVehicle{
public void run(String vehicle) {
System.out.println(vehicle + "在水中运行...");
}
}
运行结果:
单一职责原则注意事项和细节
- 降低类的复杂度,一个类只负责一项职责(例如:一个StudentDAO类就只负责student表的数据库操作,对于teacher表的修改就交给TeacherDAO类)
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中的方法足够少,才可以只在方法级别保持单一职责原则