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

server/2024/11/14 5:28:27/

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

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

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

        例子

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

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

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

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

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

        代码

整体结构

接口

         用于制定规范

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

实现类

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

扩展类

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

测试类

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

代码连接:

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


http://www.ppmy.cn/server/140778.html

相关文章

【系统面试篇】其他相关题目——虚拟内存、局部性原理、分页、分块、页面置换算法

目录 一、相关问题 1. 什么是虚拟内存?为什么需要虚拟内存? (1)内存扩展 (2)内存隔离 (3)物理内存管理 (4)页面交换 (5)内存映…

clickhouse自增id的处理

msyql 中创建数据表的时候可以通过AUTO_INCREMENT 来实现,clickhouse中可以通过其他方式来处理 一、 默认值 创建表时可以实用默认值,该列值可以自动递增。如下所示 CREATE TABLE my_table ( id UInt32 DEFAULT IDENTITY(AUTO_INCREMENT), name Strin…

亲测有效:Maven3.8.1使用Tomcat8插件启动项目

我本地maven的settings.xml文件中的配置&#xff1a; <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url> </mirror>…

vue种ref跟reactive的区别?

‌Vue中的ref和reactive的主要区别在于它们处理的数据类型、实现原理以及使用方式。‌ 处理的数据类型 ‌ref‌&#xff1a;可以处理基本数据类型&#xff08;如数字、字符串、布尔值&#xff09;和对象。ref通过Object.defineProperty()的get和set方法来实现响应式&#xff…

使用 Redux 在 Flutter鸿蒙next 中实现状态管理

在 Flutter 中进行状态管理是开发应用程序时的一个关键问题。Flutter 提供了多种解决方案来管理应用的状态&#xff0c;其中 Redux 是一种广泛使用且功能强大的状态管理库。虽然 Redux 最初是为 JavaScript 和 React 设计的&#xff0c;但它的核心概念非常适用于 Flutter&#…

Golang | Leetcode Golang题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; const mod int 1e9 7type matrix [6][6]intfunc (a matrix) mul(b matrix) matrix {c : matrix{}for i, row : range a {for j : range b[0] {for k, v : range row {c[i][j] (c[i][j] v*b[k][j]) % mod}}}return c }func (a matrix) p…

大数据面试题--kafka夺命连环问

1、kafka消息发送的流程&#xff1f; 在消息发送过程中涉及到两个线程&#xff1a;一个是 main 线程和一个 sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给双端队列&#xff0c;sender 线程不断从双端队列 RecordAccumulator 中拉取…

oracle 带有小数点的0.几数据在转化为字符串的时候丢失前面的0

在Oracle数据库中&#xff0c;当你使用TO_CHAR函数将数字转换为字符串时&#xff0c;该函数的行为会依据你提供的格式模型&#xff08;format model&#xff09;而变化。如果你仅仅使用TO_CHAR(0.5)而不指定任何格式模型&#xff0c;Oracle会默认使用NLS_NUMERIC_CHARACTERS参数…