一.简介
简单来说,单一职责原则表示的就是一个类只负责一项职责。
比如,类A负责两个不同的职责。当职责1需求变更而改变A类时,可能会对职责2产生影响,为了避免此种情况,我们就要将类A的的粒度分解成A1、A2,此时也就是单一职责原则
所要表达的事情。
二. 代码示例
此时的A
类不满足单一职责原则而引发的问题
package com.principle;
/**
* @author inconspicuousy
*/
public class SingleResponsibility {
public static void main(String[] args) {
// 类A涉及职责不清楚, 需要改进
A a = new A();
a.run("小汽车"); // 小汽车在陆地上运行
a.run("飞机"); // 飞机在陆地上运行
}
}
// 交通工具类
interface Vehicle {
// 交通工具运行
void run(String name);
}
class A implements Vehicle {
// 这里A实现Vehicle接口, 但是直接就断定所有的交通工具都是在陆地上运行, 职责不清楚
@Override
public void run(String name) {
System.out.println(name + "在陆地上运行");
}
}
2.2 优化后代码示例
2.2.2 代码示例
package com.principle.single.improve;
/**
* 单一职责原则改善
* @author inconspicuousy
*/
public class SingleResponsibilityImprove {
public static void main(String[] args) {
// 就是将原先A类分成粒度更细的RoadVehicle/AirVehicle
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("小汽车");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飞机");
}
}
interface Vehicle {
void run(String name);
}
// 陆地工具
class RoadVehicle implements Vehicle {
@Override
public void run(String name) {
System.out.println(name + "在陆地上跑");
}
}
// 空中工具
class AirVehicle implements Vehicle {
@Override
public void run(String name) {
System.out.println(name + "在天空上飞");
}
}
三. 优点
- 一个类只负责一项职责,降低类的复杂度。
- 提高类的可读性和可维护性。当我们针对某一个类进行功能扩展时不会对其他类产生影响。
注意:
通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则。
转载自:https://blog.csdn.net/qq844579582/article/details/109027342