本文主要是介绍设计模式 -- 七大原则(一)-- 单一职责原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 定义
单一职责原则(Single Responsibility Principle,简称SRP)建议一个类或模块应该只负责一项职责。当需要修改一个功能时,只有一个原因会促使我们去修改它。
所谓职责,在这里指的是类所承担的功能或行为。如果一个类负责多个职责,那么当其中某个职责需要变更时,可能会影响其他职责的正常运作,从而导致系统的稳定性和可维护性降低。因此,单一职责原则强调一个类应该只负责一项职责,从而确保系统的健壮性和可扩展性。
2 关键要素
- 职责清晰:一个类的职责应该是清晰且具体的。比如,一个负责用户验证的类就不应该同时处理用户的数据存储。
- 封装性:单一职责原则鼓励将功能封装在独立的类或模块中,这有助于功能的复用和维护。
- 灵活性与可扩展性:遵循单一职责原则的代码更容易扩展。因为一个类的功能单一,添加新功能或修改现有功能时,对其他代码的影响较小。
- 防止耦合:避免了一个类或模块同时处理多个职责,减少了不同职责之间的耦合,使得代码更易于管理。
3 实例
3.1 目标
假设有一个名为“Vehicle”的类,既负责陆地交通工具如汽车,又负责空中交通工具如飞机的运行方式。这样的设计显然违反了单一职责原则,因为当交通工具运行方式发生变化时,必须修改这个类,增加了出错的风险。按照单一职责原则,应将交通工具类拆分为“LandVehicle”和“AirVehicle”等,每个类分别负责各自领域内的运行方式。
3.2 方案1
public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle(); vehicle.run("摩托车");vehicle.run("汽车");vehicle.run("飞机");}
}// 方案1
// 交通工具类
class Vehicle {public void run(String vehicle) {System.out.println(vehicle + " 在公路上运行 ");}
}
1. 在方式 1 的 run 方法中,违反了单一职责原则
2. 解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可
3.3 方案2
public class SingleResponsibility2 {public static void main(String[] args) {RoadVehicle roadVehicle = new RoadVehicle(); roadVehicle.run("摩托车");roadVehicle.run("汽车");AirVehicle airVehicle = new AirVehicle();airVehicle.run("飞机");}
}// 方案 2
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 + "水中运行");}
}
1. 遵守单一职责原则
2. 但是这样做的改动很大,即将类分解,同时修改客户端
3.4 方案3
public class SingleResponsibility3 {public static void main(String[] args) {Vehicle2 vehicle2 = new Vehicle2();vehicle2.run("汽车"); vehicle2.runWater("轮船");vehicle2.runAir("飞机");}
}// 方式 3
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. 这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责
4 注意事项和细节
- 降低类的复杂度:一个类只负责一项职责,逻辑会比负责多项职责的类简单得多。
- 提高类的可读性:职责单一使代码更加清晰易懂,其他开发者可以更快地理解类的功能和作用。
- 提高系统的可维护性:通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。
- 变更引起的风险降低:遵循单一职责原则能够减少因修改带来的风险,确保系统的稳定性和可靠性。
5 总结
单一职责原则是面向对象设计中的一个核心原则,它鼓励开发者将复杂的系统分解为多个小而专的模块,每个模块负责一个职责。这样做不仅提高了代码的可维护性、可读性和可扩展性,还降低了代码的复杂性和出错的概率。
这篇关于设计模式 -- 七大原则(一)-- 单一职责原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!