设计模式-七个基本原则之一-开闭原则 + SpringBoot案例

开闭原则:(SRP) 面向对象七个基本原则之一

  • 对扩展开放:软件实体(类、模块、函数等)应该能够通过增加新功能来进行扩展。
  • 对修改关闭:一旦软件实体被开发完成,就不应该修改它的源代码。

要看实际场景,比如组内大佬高级程序员开发的公用方法sdk很多人引用,这时候肯定要去继承然后实现,如果是自己开发,则没有必要这样继承,看实际业务需求。

        例子

                比如有一个需求,需要实现计算圆形面积。

标准SDK只提供了Π=3.14D.

A程序员觉得SDK的精度已经满足了他的需求.

B程序员需要Π的后33位.

那么B程序员应该继承标准SDK自己实现而不是傻乎乎的跑去修改SDK.

        代码

整体结构

接口

         用于制定规范

        这里的两个接口分别实现计算圆形和矩形

实现类

        用于实现接口从而实现单一职责原则。而不是把所有代码写在一个类里面成一坨。

扩展类

        即当前“标准” SDK无法满足我们的需求:需要足够精度 | 但是又不能直接修改标准 则使用扩展满足开闭原则

测试类

        这里采用了Spring boot,如果没有学过的话则自己new一下即可。

代码连接:

设计模式: 设计模式的七大原则以及所有设计模式的案例

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

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

相关文章

Scala的List

1.定义List的类型方式为List[ T ],T表示为数据类型。 2.List是一个不可变的集合,想要获取可变的序列就需要ListBuffer,通过-或方式添加或删除元素,还可以调用remove方法移除元素。 def main(args: Array[String]): Unit {//1.建立 可变列表…

[zotero]Ubuntu搭建WebDAV网盘

搭建Ubuntu Apache WebDAV网盘的综合步骤,使用666端口: 安装Apache和WebDAV模块: sudo apt update sudo apt install apache2 sudo a2enmod dav sudo a2enmod dav_fs创建WebDAV目录: sudo mkdir /var/www/webdav sudo chown www-d…

【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、1×1 卷积层、汇聚层、多通道汇聚层

【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、11 卷积层、汇聚层、多通道汇聚层 多输入多输出通道多通道输入的卷积示例:多通道的二维互相关运算 多输出通道实现多通道输出的互相关运算 11 卷积层11 卷积的作用 使用全连接层实现 11 卷积小结 …

如何解读多年连续发布的指数?

解读多年连续发布的指数是投资者和分析师理解市场趋势、预测未来走向的重要手段。以下是一些关键步骤和方法,有助于系统地解读多年连续发布的指数: 一、收集历史数据 来源:从财经网站、证券交易所官方网站或专业的金融数据服务提供商处获取…

Spring——入门

概述 Spring是什么 Spring是一款主流的Java EE轻量级开源框架,其目的适用于简化Java企业级应用开发难度和开发周期。Spring用途不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring框架…

计算机毕业设计Python+Neo4j中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

vue+exceljs前端下载、导出xlsx文件

首先安装插件 npm install exceljs file-saver第一种 简单导出 //页面引入 import ExcelJS from exceljs; import {saveAs} from file-saver; export default {methods: { /** 导出操作 */async handleExportFun() {let that this// 获取当前年月日 用户下载xlsx的文件名称设…

潮玩宇宙方块兽系统开发:可定制UI与多种游戏内嵌助力个性化体验

潮玩宇宙方块兽系统开发正在推动潮玩与游戏的融合,通过个性化的UI设计和多游戏内嵌模式,为用户带来了独一无二的体验。本文将从可定制UI、多游戏内嵌功能以及系统实现等方面入手,探讨如何构建一个极具吸引力的潮玩宇宙方块兽系统。 一、可定制…

【Windows修改Docker Desktop(WSL2)内存分配大小】

记录一下遇到使用Docker Desktop占用内存居高不下的问题 自从使用了Docker Desktop,电脑基本每天都需要重启,内存完全不够用,从16g扩展到24,然后到40G,还是不够用;打开Docker Desktop 运行时间一长&#x…

HTTP 和 HTTPS 的区别 - 2024最新版前端秋招面试短期突击面试题【100道】

HTTP 和 HTTPS 的区别 - 2024最新版前端秋招面试短期突击面试题【100道】 🌐 在现代网络通信中,HTTP(超文本传输协议)和 HTTPS(安全超文本传输协议)是两种非常重要的协议。理解它们之间的区别和各自的特点…

无人机之姿态融合算法篇

无人机的姿态融合算法是无人机飞行控制中的核心技术之一,它通过将来自不同传感器的数据进行融合,以实现更加精确、可靠的姿态检测。 一、传感器选择与数据预处理 无人机姿态融合算法通常依赖于多种传感器,包括加速度计、陀螺仪、磁力计等。这…

pta 树

L2-006 树的遍历 - 团体程序设计天梯赛-练习集 #include <bits/stdc.h> #define int long long #define x first #define y second using namespace std; const int N35; pair<int,int> tree[N]; int post[N],in[N]; int n; int build(int la,int lb,int ra,int r…

Transformer 中的残差连接:为什么在正则化前加入残差?

7. Residual Connection Transformer 中的残差连接&#xff1a;为什么在正则化前加入残差&#xff1f; Transformer 中的编码器块&#xff08;EncoderBlock&#xff09;设计了一项重要的结构&#xff1a;残差连接&#xff08;Residual Connection&#xff09;&#xff0c;即在…

大语言模型LLMs在医学领域的最新进展总结

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 相比其他学科&#xff0c;医学AI&#xff0c;是发表学术成果最多的领域。 医学数据的多样性和复杂性&#xff08;包括文本、图像、基因组数据等&#xff09;&#xff0c;使得…

15分钟学 Go 第 43 天:前端与Go的结合

第43天&#xff1a;前端与Go的结合 目标&#xff1a;了解Go如何与前端交互&#xff0c;前端使用Vue.js 在现代Web开发中&#xff0c;Go语言常用于后端开发&#xff0c;而Vue.js是一个流行的前端框架&#xff0c;用于构建用户界面。结合二者&#xff0c;可以构建高效、可维护的…

项目:使用LNMP搭建私有云存储

一、准备工作 恢复快照&#xff0c;关闭安全软件 systemctl status firewalld //检查防火墙是否关闭getenforce //查看SElinux的执行状态which nmcli //检查虚拟机网络状态 二、搭建LNMP环境 yum -y nstall nginx mariadb-server php* //搭建环境三、上传软件 …

初学者指南:用例图——开启您的软件工程之旅

目录 背景&#xff1a; 基本组成&#xff1a; 关联&#xff08;Assciation&#xff09;&#xff1a; 包含&#xff08;Include&#xff09;&#xff1a; 扩展&#xff08;Extend&#xff09;&#xff1a; 泛化&#xff08;Inheritance&#xff09;&#xff1a; 完整银行…

针对oneplus6 怎么选择lineage源码的什么分支

针对oneplus6 怎么选择lineage源码的什么分支 &#xff1a; 先刷入 官方LineageOS-20 从而正常启动, 正常启动 说明 官方LineageOS-20 中的驱动是正常的 再用 编译LineageOS源码的分支20 &#xff0c;并用https://github.com/LineageOS/android_device_oneplus_enchilada/blob…

Python yeild关键字

定义生成器函数 def sync_generator(n):for i in range(n):yield i python复制代码 def sync_generator(n): 定义了一个名为 sync_generator 的函数&#xff0c;它接受一个参数 n。for i in range(n): 在函数内部&#xff0c;有一个 for 循环&#xff0c;它遍历从 0 到 n-1 …

linux进程的状态之环境变量

我们在前面了解了进程的状态及相关概念 接下来我们接着上一篇进程的状态接着了解环境变量 进程的状态 文章目录 目录 文章目录 前言 二、环境变量 1、常见环境变量 2、查看环境变量 3、修改PATH 4、HOME 5、PATH ​编辑 6、和环境变量相关的命令 三、环境变量的组织…