单一职责原则介绍

e7c3e2af24ce41d0b120d15ea4bfb7c7.gif

 

单一职责原则(Single Responsibility Principle,简称SRP)是面向对象设计中的一个重要原则,它指出一个类应该只有一个引起变化的原因。换句话说,每个类都应该有一个明确的任务,只做一件事,并做好这件事。这样做可以提高代码的可维护性和可重用性,降低复杂性,并减少不同模块之间的耦合度。

 

例如,假设你正在开发一个电子商务网站,你需要处理订单。在最初的设计中,你可能有一个名为 Order 的类,它负责处理订单的所有方面,包括计算价格、更新库存、发送邮件通知等等。然而,随着时间的发展,你会发现这些功能的变化原因各不相同。价格计算可能因为促销活动而频繁更改,而邮件通知可能因为市场营销策略而调整。这时,按照单一职责原则,你应该将 Order 类拆分为多个独立的类,每个类只负责一项任务,如 PriceCalculator、InventoryManager 和 EmailNotifier。

 

以下是伪代码示例:

 

```

// 原始的 Order 类

class Order {

    double calculatePrice() {...}

    void updateInventory() {...}

    void sendNotificationEmail() {...}

}

 

// 拆分后的类

class PriceCalculator {

    double calculatePrice() {...}

}

 

class InventoryManager {

    void updateInventory() {...}

}

 

class EmailNotifier {

    void sendNotificationEmail() {...}

}

 

// 主要的 Order 类现在只负责协调工作

class Order {

    private final PriceCalculator priceCalculator;

    private final InventoryManager inventoryManager;

    private final EmailNotifier emailNotifier;

 

    public Order(PriceCalculator priceCalculator, InventoryManager inventoryManager, EmailNotifier emailNotifier) {

        this.priceCalculator = priceCalculator;

        this.inventoryManager = inventoryManager;

        this.emailNotifier = emailNotifier;

    }

 

    public void processOrder() {

        double price = priceCalculator.calculatePrice();

        inventoryManager.updateInventory();

        emailNotifier.sendNotificationEmail();

    }

}

```

 

这样,每当需要调整某个功能时,只需要关注相应的类即可,而不是整个 Order 类。这使得系统更加灵活,更容易维护和扩展。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 3 —— 笔记(模板语法,响应式变量)

模板语法: Vue 使用一种基于 html 的模板语法,使我们能声明式将其组件实例绑定到呈现的 dom 上 文本插值 基础数据绑定形式 双大括号 会替换相应组件实例 msg 属性的值 原始html 双大括号会将数据解释为纯文本 不是html 想插入html 使用 v-html 指令 &…

Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

Kubernetes - CentOS7搭建k8s集群高可用(kubeadm/二进制包部署方式)实测配置验证手册 前言概述: 一、Kubernetes—k8s是什么 Kubernetes 这个名字源于希腊语,意为“舵手“或”飞行员"。 Kubernetes,简称K8s&#…

【声网】实现web端与uniapp微信小程序端音视频互动

实现web端与uniapp微信小程序端音视频互动 利用声网实现音视频互动 开通声网服务 注册声网账号 进入Console 成功登录控制台后,按照以下步骤创建一个声网项目: 展开控制台左上角下拉框,点击创建项目按钮。 在弹出的对话框内,依…

Angular创建项目

Angular创建项目 文章目录 Angular创建项目1. 创建项目1.1 直接安装1.2 跳过npm i安装 2. 运行程序 1. 创建项目 ng new 项目名称 1.1 直接安装 ng new angulardemo --同时会安装依赖包,执行的命令就是npm i 1.2 跳过npm i安装 ng new angulardemo --skip-inst…

SpringWebFlux RequestBody多出双引号问题——ProxyPin抓包揪出真凶

缘起 公司有个服务做埋点收集的,可以参考我之前的文章埋点日志最终解决方案,今天突然发现有些数据日志可以输出,但是没法入库。 多出的双引号 查看Flink日志发现了JSON解析失败,Flink是从Kafka拿数据,Kafka本身不处…

Servlet和Tomcat运作过程

记录一下前后端请求交互过程(不涉及Spring框架): 编写一个UserServlet 在web.xml文件中编写映射路径 编写前端

chrome浏览器安装elasticsearch的head可视化插件

head插件简介 elasticsearch-head被称为是弹性搜索集群的web前端,head插件主要是用来和elastic Cluster交互的Web前端 head插件历史 elasticsearch-head插件在0.x-2.x版本的时候是集成在elasticsearch内的,由elasticsearch的bin/elasticsearch-plugin…

14.MMD导入Blender及贴图步骤

MMD导出.abc文件 在MMD十周年桥版本导入一个人物模型,这里导入仆人 注意MMD的路径不能有中文 点击上面的MMDBridge 设定 第一个选择blender by 第二个选择实行 这里是选择帧数范围和帧率 帧率一定要是30,不然后面可能会出问题 点击文件导出视频…

axios——503响应超时重复多次请求——技能提升

今天在写后台管理系统时,遇到一个问题,就是每天早上一启动项目,接口会提示503超时,因此项目运行必须重新刷新请求成功后才可以正常使用。 后端同事说请求超时了,需要前端处理一下,如果是503的状态码&#…

最长回文子串问题

原题链接 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 题目解析 给一个字符串s&#xff0c;求出它最长的回文子串之一。 回文串&#xff1a;逆序后与原字符串一样的字符串&#xff0c;如abcba 1 < s.length < 1000s 仅由数字和英文字母组成 三种解法 动…

Web3解密:理解去中心化应用的核心原理

引言 在当前数字化时代&#xff0c;去中心化技术和应用正在逐渐引起人们的关注和兴趣。Web3技术作为去中心化应用&#xff08;DApps&#xff09;的基础&#xff0c;为我们提供了一个全新的互联网体验。但是&#xff0c;对于许多人来说&#xff0c;这个复杂的概念仍然充满了神秘…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业&#xff0c;简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了&#xff0c;…