单一职责原则
单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则
定义
一个类应该只有一种职责。
实例
示例1:
public class Vehicle {
public void run(String name) {
System.out.println(name + "在地上跑!");
}
}
public class SingleResponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("飞机");
vehicle.run("汽车");
vehicle.run("轮船");
}
}
此上情况,违背了常识。不同的交通工具,有不同的运行方式。Vehicle中的run方法,没有满足单一职责的原则。导致出现了职责多样化,出现了错误。
示例2:
根据交通工具运行方式的不同区分成不同的类。处理上面的职责多样化的问题。
/**
* 根据交通工具运行方式的不同区分成不同的类
* @author Administrator
*/
public interface Vehicle {
void run(String name);
}
public class RoadVehicle implements Vehicle{
@Override
public void run(String name) {
System.out.println(name + "在地上跑!");
}
}
public class AirVehicle implements Vehicle{
@Override
public void run(String name) {
System.out.println(name + "在天上飞!");
}
}
public class WaterVehicle implements Vehicle{
@Override
public void run(String name) {
System.out.println(name + "在水里游!");
}
}
此上情况,通过定义多个交通工具的实现类,满足不同的交通工具有各自独有的运行方式。满足了单一职责原则的设计。
优点:
- 代码结果更加灵活
- 可读性高,可维护性高 缺点:
- 创建多个实现类,增加了内存的开销
示例3
不分解Vehicle类,直接修改Vehicle类中的方法即可
/**
* 不分解Vehicle类,直接修改Vehicle类中的方法即可
*/
public class Vehicle {
public void runRoad(String name) {
System.out.println(name + "在地上跑!");
}
public void runAir(String name) {
System.out.println(name + "在天上飞!");
}
public void runWater(String name) {
System.out.println(name + "在水里游!");
}
}
public class SingleResponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("飞机");
vehicle.run("汽车");
vehicle.run("轮船");
}
}
此上情况,通过在一个类中,添加不同交通工具的运行方法,满足了对应的交通工具有自己的运行方式。满足了单一职责原则的设计。
优点:
- 只实例化一个类,减小了内存开销
- 代码可读性高,可维护性高 缺点:
- 扩展性不如第二种 注意事项和细节
- 降低类的复杂度,一个类只负责一项职责。
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则
- 只有逻辑足够简单,才可以在代码级违反单一职责原则;
- 只有类中方法数量足够少,可以在方法级别保持单一职责原则