软件开发中单一职责原则(SRP)是SOLID五大设计原则中的第一个,由Robert C. Martin在21世纪初提出。它主张一个类应该仅有一个职责,并且该职责应该被完全封装在类中。这一原则的目的是减少类间的耦合,增加代码的可维护性和可扩展性。
肖哥弹架构 跟大家“弹弹” 代码设计技巧,需要代码关注
欢迎 点赞,点赞,点赞。
关注公号Solomon肖哥弹架构获取更多精彩内容
历史热点文章
- 数据访问对象模式(Data Access Object Pattern):电商平台商品管理实战案例分析
- Holder模式(Holder Pattern):公司员工权限管理系统实战案例分析
- 一个项目代码讲清楚DO/PO/BO/AO/E/DTO/DAO/ POJO/VO
2. 单一职责设计图:
3. 单一职责解决什么:
单一职责原则解决了类设计中的职责不明确和过度耦合问题。它确保每个类只关注一个功能领域,从而降低类之间的依赖,提高代码的可维护性和灵活性。
3. 单一职责特点:
- 高内聚性:每个类都紧密围绕一个职责进行设计。
- 低耦合性:类与类之间的依赖关系减少,修改一个类不会影响到其他类。
- 易于理解:每个类的职责清晰,易于新开发人员理解。
4. 单一职责缺点:
- 类数量增多:可能会导致项目中类的数量急剧增加。
- 过度细分:在某些情况下,过度追求单一职责原则可能会导致职责划分过细,反而降低代码的可读性。
5. 单一职责使用场景:
当系统复杂度增加,原有类开始承担多个职责,或者当修改一个功能需要同时修改多个地方时,就需要考虑使用单一职责原则进行重构。
6. 单一职责案例
6.1 订单案例
重构案例:
- 考虑一个电子商务平台的订单处理系统,其中订单服务类同时处理订单创建、支付和物流等。
重构前:
public class OrderService {
public void createOrder(Order order) {
// 创建订单逻辑
}
public void processPayment(Order order) {
// 处理支付逻辑
}
public void shipOrder(Order order) {
// 发货逻辑
}
}
重构后:
public class OrderCreationService {
public void createOrder(Order order) {
// 创建订单逻辑
}
}
public class PaymentService {
public void processPayment(Order order) {
// 处理支付逻辑
}
}
public class ShipmentService {
public void shipOrder(Order order) {
// 发货逻辑
}
}
6.2 库存案例
书店库存管理系统,初始设计中,InventoryManager
类负责处理库存的增加、减少、查询以及订单处理等所有逻辑。随着业务的发展,这个类变得非常庞大和复杂,难以维护和扩展
重构前(InventoryManager.java)
public class InventoryManager {
public void addStock(Book book, int quantity) {
// 增加库存逻辑
}
public void reduceStock(Book book, int quantity) {
// 减少库存逻辑
}
public int checkStock(Book book) {
// 检查库存逻辑
}
public void processOrder(Order order) {
// 处理订单逻辑,可能包括减少库存等
}
}
重构后:
根据单一职责原则将InventoryManager
拆分成几个类:
- StockService.java - 负责库存的增加和减少。
public class StockService {
public void addStock(Book book, int quantity) {
// 增加库存逻辑
}
public void reduceStock(Book book, int quantity) {
// 减少库存逻辑
}
}
- StockCheckService.java - 负责检查库存。
public class StockCheckService {
public int checkStock(Book book) {
// 检查库存逻辑
return 0; // 示例返回值
}
}
- OrderService.java - 负责处理订单。
public class OrderService {
public void processOrder(Order order) {
// 处理订单逻辑,现在只关注订单处理
}
}
7. 参考开源框架:
Spring Framework是一个遵循单一职责原则的开源框架,它通过分层架构(Controller、Service、Repository等)来体现这一原则。
8. 总结:
单一职责原则是提高软件质量、降低维护成本的重要设计原则。通过将每个类的职责限定为单一,我们能够构建出更加模块化、灵活和可维护的系统。虽然在实际应用中可能需要根据项目的具体需求进行权衡,但总体而言,遵循单一职责原则是提高软件设计质量的有效方法。
历史热点文章
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析