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

设计模式六大原则(一)--单一职责原则

1. 简介

1.1. 概述

一个类或模块应该只负责完成一项任务或承担一个责任。如果一个类或模块承担了多个职责,那么当需要修改其中一个职责的功能时,就可能会对其他职责产生影响,从而导致代码耦合度增加,维护起来更加困难。

1.2. 主要特点

单一职责原则(Single Responsibility Principle,简称SRP)的主要特点如下:

  • 一个类或模块只负责完成一项任务:遵循单一职责原则可以让代码结构更加清晰,每个类或模块只负责完成一项任务,使得代码更容易理解和维护。同时,可以减少代码之间的耦合度,提高代码的可重用性和可扩展性。

  • 可以提高代码的可读性和可维护性:当一个类或模块只负责完成一项任务时,它的功能和实现逻辑会更加明确,更容易被他人理解和修改。这有助于提高代码的可读性和可维护性。

  • 有助于实现低耦合、高内聚的代码结构:单一职责原则强调将职责分配给不同的类或模块,有助于实现低耦合、高内聚的代码结构。低耦合意味着各个组件之间的依赖关系较少,高内聚意味着每个组件都专注于完成一项任务。这样的代码结构更易于维护和扩展。

  • 有利于实现模块化和可重用性:遵循单一职责原则可以让每个类或模块专注于完成一项任务,使得这些类或模块更容易被重用。同时,模块化的设计也有助于提高代码的灵活性和可扩展性。

  • 有助于预防过度设计:在实际开发过程中,过度设计可能会导致代码过于复杂,难以理解和维护。单一职责原则强调将职责分配给不同的类或模块,有助于防止过度设计,实现更加简洁和高效的代码结构。

2. 优缺点

2.1. 优点

  • 易于维护:遵循单一职责原则可以让代码结构更加清晰,每个类或模块只负责完成一项任务,使得代码更容易理解和修改。这有助于提高代码的可读性和可维护性。

  • 低耦合、高内聚:单一职责原则强调将职责分配给不同的类或模块,有助于实现低耦合、高内聚的代码结构。低耦合意味着各个组件之间的依赖关系较少,高内聚意味着每个组件都专注于完成一项任务。这样的代码结构更易于维护和扩展。

  • 模块化和可重用性:遵循单一职责原则可以让每个类或模块专注于完成一项任务,使得这些类或模块更容易被重用。同时,模块化的设计也有助于提高代码的灵活性和可扩展性。

  • 防止过度设计:在实际开发过程中,过度设计可能会导致代码过于复杂,难以理解和维护。单一职责原则强调将职责分配给不同的类或模块,有助于防止过度设计,实现更加简洁和高效的代码结构。

2.2. 缺点

  • 可能导致代码冗余:在某些情况下,遵循单一职责原则可能会导致代码冗余,因为需要创建更多的类或模块来完成不同的任务。这可能会增加代码的复杂性和维护成本。

  • 可能导致系统过于复杂:在一些复杂的系统中,遵循单一职责原则可能会导致系统过于复杂,因为需要创建大量的类或模块来处理不同的职责。这可能会降低代码的可读性和可维护性。

  • 可能会影响性能:在一些性能敏感的应用程序中,遵循单一职责原则可能会对性能产生一定的影响,因为需要在不同的类或模块之间进行协作和通信。这可能会增加系统的响应时间和执行时间。

3. 详细介绍

3.1. Java代码

以下是一个简单的Java代码实例,演示了如何应用单一职责原则来实现一个简单的计算器应用程序。

// 定义一个加法操作接口
public interface Operation {int execute(int a, int b);
}// 实现加法操作的加法操作实现类
public class AddOperation implements Operation {@Overridepublic int execute(int a, int b) {return a + b;}
}// 实现减法操作的减法操作实现类
public class SubtractOperation implements Operation {@Overridepublic int execute(int a, int b) {return a - b;}
}// 定义一个计算器接口
public interface Calculator {int calculate(Operation operation, int a, int b);
}// 实现计算器功能的计算器实现类
public class CalculatorImpl implements Calculator {@Overridepublic int calculate(Operation operation, int a, int b) {return operation.execute(a, b);}
}// 测试代码
public class Main {public static void main(String[] args) {Calculator calculator = new CalculatorImpl();Operation addOperation = new AddOperation();int result = calculator.calculate(addOperation, 10, 20);System.out.println("结果:" + result); // 输出:结果:30Operation subtractOperation = new SubtractOperation();int result2 = calculator.calculate(subtractOperation, 10, 20);System.out.println("结果:" + result2); // 输出:结果:-10}
}
http://www.lryc.cn/news/426778.html

相关文章:

  • c语言学习,malloc()函数分析
  • 【运维项目经历|041】上云项目-物理机迁移到阿里云
  • 分组并合并其它列的非空值 --Excel难题#83
  • VM相关配置及docker
  • Redis中Set数据类型常用命令
  • mysql误删数据恢复记录
  • 论文阅读:Real-time Controllable Denoising for Image and Video
  • 【Kubernetes】虚拟 IP 与 Service 的代理模式
  • 深度学习·Pytorch
  • fastzdp_sqlmodel新增get_first和is_exitsts方法
  • 嵌入式软件--数电基础 DAY 3
  • 【生成式人工智能-十五-经典的影像生成方法-GAN】
  • python 已知x+y=8 求x*y*(x-y)的最大值
  • windows平台的postgresql主从数据库流备份
  • Spring 常见设计模式
  • 优化大量数据导出到Excel的内存消耗(二):如果数据超出Excel单表上限,则进行分表
  • rustrover打开会报Error: Invalid toolchain
  • docker-compose 安装canal
  • Unity动画模块 之 3D Rig页签
  • 【蓝桥杯冲刺省一,省一看这些就够了-Java版本】蓝桥杯日期问题相关模板以及练习题
  • 【经典算法】BFS_FloodFill算法
  • RocketMQ之Topic主题详解
  • 实战OpenCV之图像显示
  • I2C的10-bit地址空间
  • TinyWebserver的复现与改进(6):定时器处理非活动连接
  • ThinkPHP5 5.0.23 远程代码执行漏洞
  • C++鼠标键盘操作自动化
  • 多个主流Python GUI库全面解析,助你用Python轻松构建精美界面
  • Kotlin学习-01创建kotlin学习
  • Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)