单一职责原则
单一职责原则概述
对类来说的,即一个类应该只负责一项职责。如类Cola负责两个不同职责:职责1:生产可乐,职责2:销售可乐
当职责1:生产可乐需求变更而改变类Cola时,可能造成职责2:销售可乐执行错误,所以需要将类Cola的粒度分解为:类ProductionCola,类SaleCola
单一职责原则:各司其职
单一职责原则实际应用
应用背景
描绘出一些人正在使用的交通工具的情况
解决方法一
package com.tan.principle.singleresponsibility;
/*
方案一:
问题:在交通工具类中的drive方法,违反了单一职责原则
解决办法:根据交通工具运行方法的不同,分解成不同的类
*/
public class SingleResponsibilityDemo1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.drive("汽车");
vehicle.drive("自行车");
vehicle.drive("飞机");
}
}
/*
交通工具类
*/
class Vehicle {
public void drive(String vihicle) {
System.out.println("正在运行:" + vihicle);
}
}
解决方法二
package com.tan.principle.singleresponsibility;
/*
方案二:
遵守了单一职责原则,但是改动较大:将类分解,同时修改了客户端
优化:方案三直接修改Vehicle类,使改动的代码变少
*/
public class SingleResponsibilityDemo2 {
public static void main(String[] args) {
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.drive("汽车");
roadVehicle.drive("自行车");
AirVehicle airVehicle = new AirVehicle();
airVehicle.drive("飞机");
}
}
class RoadVehicle {
public void drive(String vihicle) {
System.out.println("正在公路上运行:" + vihicle);
}
}
class WaterVehicle {
public void drive(String vihicle) {
System.out.println("正在水里运行:" + vihicle);
}
}
class AirVehicle {
public void drive(String vihicle) {
System.out.println("正在天空上运行:" + vihicle);
}
}
解决方法三
package com.tan.principle.singleresponsibility;
/*
方案三:
对原来的类没有做较大的修改,只是增添了方法的个数
虽然没有在类这个细粒度上遵守单一职责原则,但是在方法这一细粒度上遵守了单一职责原则
*/
public class SingleResponsibilityDemo3 {
public static void main(String[] args) {
Vehicle2 vehicle2 = new Vehicle2();
vehicle2.driveRoad("汽车");
vehicle2.driveAir("飞机");
vehicle2.driveWater("帆船");
}
}
class Vehicle2 {
public void driveRoad(String vihicle) {
System.out.println("正在公路上运行:" + vihicle);
}
public void driveWater(String vihicle) {
System.out.println("正在水里运行:" + vihicle);
}
public void driveAir(String vihicle) {
System.out.println("正在天空上运行:" + vihicle);
}
}
单一职责原则注意事项
单一职责原则注意事项:
1)降低类的复杂度,一个类只负责一项职责
2)提高类的可读性,可维护性
3)降低变更引起的风险
4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单才可以在代码违
反单一职责原则:只有类中方法数量足够少的时候,才可以在方法这一细粒度保持单一职责原则,在类这一细粒度违反单一职责原则