本文主要是介绍GoF23-单一职责原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
单一职责原则
单一职责原则概述
对类来说的,即一个类应该只负责一项职责。如类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)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单才可以在代码违反单一职责原则:只有类中方法数量足够少的时候,才可以在方法这一细粒度保持单一职责原则,在类这一细粒度违反单一职责原则
这篇关于GoF23-单一职责原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!