【轻松拿捏】设计模式六大基本原则(一)单一职责原则(SRP - Single Responsibility Principle)

news2024/11/16 3:14:42

🎈边走、边悟🎈迟早会好

一. 概述

        单一职责原则(SRP - Single Responsibility Principle)是面向对象设计中的一个基本原则。它的核心思想是:一个类只应有一个引起它变化的原因,也就是说,一个类应该只负责一项职责或功能。

二. 详细说明

  • 职责定义:职责是指类承担的功能或行为。如果一个类承担了多项职责,那么这些职责就可能相互影响,进而引起类的变化。这种情况下,维护类的复杂性会增加,容易引入错误。
  • 变化的原因:变化的原因通常来自外部的需求变更。一个类如果有多个职责,那么每个职责的变化都会引起类的修改。这违背了“高内聚、低耦合”的设计原则,使得类的维护变得困难。

 三. 举例

         假设我们有一个类 Employee,这个类既负责员工信息的管理(如姓名、地址等),又负责工资计算。如果以后需要改变工资计算的规则,我们就必须修改这个类,尽管员工信息管理的逻辑可能完全没有变化。

class Employee:
    def __init__(self, name, address):
        self.name = name
        self.address = address

    def calculate_salary(self):
        # 工资计算逻辑
        pass

    def update_address(self, new_address):
        # 更新员工地址
        self.address = new_address

        在这种情况下,Employee 类违反了单一职责原则,因为它承担了两项职责:员工信息管理和工资计算。 

改进:

我们可以将员工信息管理和工资计算的职责分离成两个类,各自负责一项职责:

class Employee:
    def __init__(self, name, address):
        self.name = name
        self.address = address

    def update_address(self, new_address):
        self.address = new_address


class SalaryCalculator:
    def calculate_salary(self, employee):
        # 工资计算逻辑
        pass

现在,Employee 类只负责管理员工信息,而 SalaryCalculator 类专门负责工资计算。这种设计方式使得每个类只有一个引起它变化的原因,从而符合单一职责原则。 

四、总结

  • 降低复杂度:每个类只负责一个职责,使类更简单易懂。
  • 提高可维护性:当需求发生变化时,只有相关的类需要修改,减少了引入错误的可能性。
  • 增强可重用性:单一职责的类更容易在不同的上下文中复用。
  • 单一职责原则是构建高质量、可维护软件的重要基础,有助于提高代码的健壮性和可扩展性。

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Docker-compose一键部署Wordpress平台

一、Docker-compose概述: docker-compose:单机容器编排 Dockerfile:先配置好文件,然后build,镜像——>容器。 docker-compose:即可基于Dockerfile,也可以基于镜像,可以一键式拉…

扎心“我学了六个月 Python,怎么还是会找不到工作”

前言 👉 小编已经为大家准备好了完整的代码和完整的Python学习资料,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】 在编程界,Python是一种神奇的存在。有人认为,只有用Python才能优雅写代码…

qt-16可扩展对话框--隐藏和展现

可扩展对话框 知识点extension.hextension.cppmain.cpp运行图初始化隐藏展现--点击--详细按钮 知识点 MainLayout->setSizeConstraint(QLayout::SetFixedSize);//固定窗口大小 extension.h #ifndef EXTENSION_H #define EXTENSION_H#include <QDialog>class Extens…

如何对 GitLab 中文版进行升级?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

EVE-NG导入锐捷镜像

安装搭建好了EVE-NG之后&#xff0c;我们想要做虚拟实验还需要载入虚拟镜像&#xff0c;下面我来演示如何导入锐捷镜像 准备工作&#xff1a; 1.安装EVE-NG 2.FTP远程传输工具 正式开始&#xff1a; 第一步&#xff1a;下载镜像 前往锐捷官网下载锐捷设备镜像 锐捷镜像下…

以太网链路聚合(LACP模式)

1. 实验目的 掌握使用静态LACP模式配置链路聚合的方法掌握控制静态LACP模式下控制活动链路的方法掌握静态LACP的部分特性的配置 实验拓扑 实验拓扑如图11-12所示&#xff1a; 图11-12以太网聚合LACP模式 3. 实验步骤 PC机IP地址的配置 PC1的配置&#xff0c;在ipv4下选…

内存(动态开辟)———C语言

内存管理&#xff1a; 1.C语言运行时的内存分配 2.static关键字 1.修饰变量 局部变量&#xff1a; <1>在编译的过程中&#xff0c;会在数据区为该变量开辟空间&#xff0c;如果代码中未对其进行初始化&#xff0c;则系统默认初始化为0。 <2>用static修饰的局部变量…

a股市场的股票怎么做期权交易

在金融市场中&#xff0c;A股股票期权是一种重要的衍生金融工具&#xff0c;它赋予持有者在未来某一特定日期以预定价格买入或卖出股票的权利。了解期权交易流程对于投资者至关重要&#xff0c;本文将详细介绍a股市场的股票怎么做期权交易&#xff1f;本文来自&#xff1a;期权…

【软件测试】测试阶段、评审、瀑布式流程

软件测试 测试阶段评审瀑布式流程 测试阶段 冒烟测试&#xff08;Smoke Testing&#xff09;&#xff1a; 冒烟测试是一种快速的初步测试&#xff0c;通常在开发周期的早期进行&#xff0c;用以验证软件的基本功能是否按预期工作。它通常在软件构建完成后立即执行&#xff0c;以…

【windows系统】应用与功能下卸载程序提示Windows找不到文件解决办法

我们使用windows系统的时候&#xff0c;想要删除某个程序&#xff0c;可以通过windows系统设置中的添加或删除程序来操作&#xff0c;如下图所示 打开如图下所示应用和功能界面&#xff0c;可以对程序进行卸载 如图下所示&#xff0c;我们可以通过这种方式卸载掉电脑中的程序 但…

ClickHouse集群的安装

目录 1.clickhouse中文文档地址 2.centos安装部署 2.1采用tgz的方式安装 2.2修改配置文件 2.3修改数据目录 2.4创建角色和目录 3 集群安装 3.1配置文件修改 3.2启动zookeeper 3.3启动clickhouse-server 3.4任意节点连接clickhouse 3.5查看集群 3.6建库 3.7查看数…

【Linux 驱动】IMX6ULL pinctrl驱动

1. 概述 Linux 驱动讲究驱动分离与分层&#xff0c;pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物。pinctrl顾名思义就是引脚控制&#xff0c;用来配置比如引脚mux复用信息&#xff0c;引脚电器属性&#xff08;比如上/下拉、速度、驱动能力等&#xff09;信息。gpio顾…

学会区分大模型——大模型的分类,让你更清晰的认识大模型

乱花渐欲迷人眼&#xff0c;学会从根本上认识问题 现在市面上大模型如百花齐放&#xff0c;对很多人来说一堆大模型带来的不是简单方便&#xff0c;而是乱七八糟以及迷茫。 因为不知道不同的大模型之间有什么区别&#xff0c;也不知道自己需要什么样的大模型&#xff1b;就拿…

【C++题解】1375. 拦截导弹方案求解

问题&#xff1a;1375. 拦截导弹方案求解 类型&#xff1a;贪心 题目描述&#xff1a; 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a; 虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都…

理解Flink数据流图

前言 在大数据处理的世界里&#xff0c;Apache Flink 已经成为处理实时数据流的一个强大工具。Flink 提供了一种高度灵活的方法来构建复杂的数据处理管道&#xff0c;其核心是所谓的 DataFlow 图模型。本文将带你深入了解 Flink DataFlow 图的基础知识&#xff0c;帮助你理解它…

Hadoop入门基础(一):深入探索Hadoop内部处理流程与核心三剑客

在大数据的世界里&#xff0c;处理海量数据的需求越来越多&#xff0c;而Hadoop作为开源的分布式计算框架&#xff0c;成为了这一领域的核心技术之一。 一、Hadoop简介 Hadoop是Apache Software Foundation开发的一个开源分布式计算框架&#xff0c;旨在使用简单的编程模型来…

别再问了!微信小程序的那些事儿,一文搞定

微信小程序是一种无需下载安装即可使用的应用&#xff0c;它嵌入在微信生态中&#xff0c;用户通过微信扫一扫或搜索即可快速访问。 无论是购物、订餐、预约服务&#xff0c;还是玩个小游戏、看篇文章&#xff0c;都不需要下载额外的APP&#xff0c;直接就能在微信里搞定。不会…

Leading SAFe领导大规模敏捷认证公开课

课程简介 SAFe – Scaled Agile Framework是目前全球最广泛使用的大规模敏捷框架&#xff0c;也是全球敏捷相关认证中增长最快、最受认可的规模化敏捷认证。全球已有超过120万名SAFe认证专业人士。据官方统计&#xff0c;获得SAFe认证的IT专业人士平均工资增长13,000美元&…

C++:模拟实现string

前言&#xff1a; 为了更好的理解string底层的原理&#xff0c;我们将模拟实现string类中常用的函数接口。为了与std里的string进行区分&#xff0c;所以用命名空间来封装一个自己的strin类。 string.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1#include<iostream&…

arm 的寄存器概述(8)

关于寄存器的概述。 带 三角形的是 这种模式下 独有的寄存器&#xff0c;也就是说&#xff0c;FIQ模式下与 SYstem/user 模式下&#xff0c;虽然都有r8 寄存器&#xff0c;但是不是一个东西。 r13 (SP ) 这是堆栈指针&#xff0c; r15(PC ) 这是 code 的指针。 r14(LR ), 这…