当前位置: 首页 > news >正文

【Java 设计模式】设计原则之单一职责原则

文章目录

    • 1. 定义
    • 2. 好处
    • 3. 应用
    • 4. 示例
    • 结语

在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。
这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。

✨单一职责原则(SRP)
✨开放/封闭原则(OCP)
✨里氏替换原则(LSP)
✨依赖倒置原则(DIP)
✨接口隔离原则(ISP)
✨合成/聚合复用原则(CARP)
✨迪米特法则(LoD)

在面向对象设计中,单一职责原则是一个重要的设计原则之一。它提倡一个类应该只有一个原因引起变化,即一个类应该只有一个职责。在本文中,我们将深入研究单一职责原则,了解它的定义、优势以及如何在实际开发中应用。

1. 定义

单一职责原则是由罗伯特·C·马丁(Robert C. Martin)提出的,它规定一个类应该只有一个引起变化的原因。换句话说,一个类应该只有一个职责。如果一个类负责太多的事情,那么一旦需求变化,可能需要修改该类的多个部分,增加了代码的复杂性,也增加了引入错误的风险。

2. 好处

单一职责原则有助于提高代码的可维护性、可读性和可扩展性,以下是一些应用单一职责原则的好处:

  • 代码清晰度: ,

    类的职责单一,使得每个类的代码都相对简单清晰,易于理解。

  • 可维护性:

    当系统变化时,我们只需关注与变化相关的类,而不必修改其他部分的代码,减少了出错的可能性。

  • 可复用性:

    单一职责原则有助于提高代码的可复用性,因为一个类只负责一种职责,可以更方便地在其他上下文中重用。

  • 测试方便:

    每个类的职责单一,使得单元测试更容易编写,测试代码覆盖更全面。

3. 应用

在应用单一职责原则时,我们可以考虑以下几个方面:

  • 分离关注点:

    确保一个类只关注一个主题或功能领域。如果一个类处理用户输入和数据存储,就有可能违反了单一职责原则。

  • 提取子类或新类:

    当一个类的职责变得过于复杂时,可以考虑将其拆分成几个更小、更具体的类,每个类负责一个明确定义的职责。

  • 遵循高内聚、低耦合原则:

    高内聚表示一个类应该有高度相关的职责,而低耦合表示类之间的关系应该尽可能松散。这有助于确保每个类的变化不会对其他类产生过多的影响。

4. 示例

假设我们有一个 UserService 类,负责用户的注册、登录等操作,同时也负责记录用户操作的日志。这就违反了单一职责原则,因为用户管理和日志记录是两个不同的关注点。

package com.cheney.demo.service;import com.cheney.demo.model.User;@Service
public class UserService {public void registerUser(User user) {log("用户注册: " + user.getUsername());}public void loginUser(String username, String password) {log("用户登陆: " + username);}private void log(String message) {System.out.println("Log: " + message);}
}

为了遵循单一职责原则,我们可以将日志记录的职责抽取出去,创建一个独立的 Logger 类:

package com.cheney.demo.common;public class Logger {public void log(String message) {// 日志记录逻辑System.out.println("Log: " + message);}
}

然后在 UserService 中使用 Logger 类:

package com.cheney.demo.service;import com.cheney.demo.common.Logger;
import com.cheney.demo.model.User;
import org.springframework.stereotype.Service;@Service
public class UserService {private Logger logger;public UserService(Logger logger) {this.logger = logger;}public void registerUser(User user) {// 用户注册逻辑logger.log("用户注册: " + user.getUsername());}public void loginUser(String username, String password) {// 用户登录逻辑logger.log("用户登陆: " + username);}
}

这样,UserService 类现在只关注用户管理的职责,而日志记录的职责交给了专门的 Logger 类,保持了单一职责原则的应用。

结语

单一职责原则是面向对象设计中一个基本且重要的原则,它有助于创建清晰、可维护、可扩展的代码。通过确保每个类只有一个职责,我们可以降低代码的复杂性,提高代码的质量。在实际项目中,遵循单一职责原则可以为团队提供更好的代码结构,减少维护的难度,使得系统更容易适应变化。

http://www.lryc.cn/news/279914.html

相关文章:

  • 实现导航栏吸顶操作
  • Docker简述与基础部署详解
  • (南京观海微电子)——色温介绍
  • 入门Linux简单操作
  • 操作系统复习 一、二章
  • 【国内访问github不稳定】可以尝试fastgithub解决这个问题
  • android:clickable=“false“无效,依然能被点击
  • Springboot WebFlux项目结合mongodb进行crud
  • 超维空间M1无人机使用说明书——61、ROS无人机物体识别与精准投放
  • Flask 小程序菜品搜索
  • Excel·VBA按指定顺序排序函数
  • 数据结构学习笔记——查找算法中的树形查找(红黑树)
  • Debezium发布历史66
  • Redis系列之使用Lua脚本
  • Wargames与bash知识16
  • 关于运维·关于数据库面试题
  • MySQL题目示例
  • HTML基本语法
  • 二分图最大匹配——匈牙利算法详解
  • 【AI视野·今日Robot 机器人论文速览 第七十一期】Fri, 5 Jan 2024
  • xtu oj 1334 Least Common Multiple
  • 【论文笔记】End-to-End Diffusion Latent Optimization Improves Classifier Guidance
  • 【HarmonyOS4.0】第四篇-ArkUI基础实战
  • 每日一题——LeetCode1128.等价多米诺骨牌对的数量
  • 关联规则分析(Apriori算法2
  • 数据仓库(2)-认识数仓
  • C#编程-实现委托
  • Ubuntu18.04 Qt 实现MQTT
  • 【软件测试】学习笔记-不同视角的软件性能与性能指标
  • Spring MVC组件