本文共 2095 字,大约阅读时间需要 6 分钟。
单一职责原则是针对 类 来说的,即一个类应该只负责一项职责。如果类A负责两个不同的职责:职责1和职责2。当职责1需求变更而改变类A时,可能造成职责2执行错误,所以需要将类A的粒度进行分解,为分别分解成类A1和类A2
public class SingleResponsibility1 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("摩托车"); vehicle.run("汽车"); vehicle.run("飞机"); }}// 交通工具类class Vehicle{ public void run(String vehicle) { System.out.println(vehicle + " 在公路上运行....."); }}
运行结果:
摩托车 在公路上运行.....汽车 在公路上运行.....飞机 在公路上运行.....
分析:
在run方法中,违反了单一职责原则。优化办法是可根据交通工具运行方法不同,分解成不同的类即可public class SingleResponsibility2 { public static void main(String[] args) { RoadVehicle roadVehicle = new RoadVehicle(); roadVehicle.run("摩托车"); AirVehicle airVehicle = new AirVehicle(); airVehicle.run("飞机"); WaterVehicle waterVehicle = new WaterVehicle(); waterVehicle.run("游艇"); }}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 + " 水中运行....."); }}
运行结果:
摩托车 公路运行.....飞机 天空运行.....游艇 水中运行.....
分析:
遵守了单一职责原则,但改动比较大。可采用为Vehicle类增加不同类型的run()的方式进行优化,这样改动的代码会比较少public class SingleResponsibility3 { public static void main(String[] args) { Vehicle2 vehicle2 = new Vehicle2(); vehicle2.run("汽车"); vehicle2.runAir("飞机"); vehicle2.runWater("游艇"); }}class Vehicle2{ public void run(String vehicle){ System.out.println(vehicle + " 在公路上运行....."); } public void runAir(String vehicle){ System.out.println(vehicle + " 在天空上运行....."); } public void runWater(String vehicle){ System.out.println(vehicle + " 在水中运行....."); }}
运行结果:
汽车 在公路上运行.....飞机 在天空上运行.....游艇 在水中运行.....
分析:
这种方式虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然遵守了单一职责原则(1)降低类的复杂度,一个类只负责一项职责
(2)提高类的可读性、可维护性 (3)降低变更引起的风险 (4)通常情况下,我们应当遵守单一职责原则。只有当逻辑足够简单时,才可以在代码级违反单一职责原则;若类中方法数量足够少,允许在方法级别保持单一职责原则转载地址:http://nrtii.baihongyu.com/