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

【Java 设计模式】设计原则

文章目录

    • ✨单一职责原则(SRP)
    • ✨开放/封闭原则(OCP)
    • ✨里氏替换原则(LSP)
    • ✨依赖倒置原则(DIP)
    • ✨接口隔离原则(ISP)
    • ✨合成/聚合复用原则(CARP)
    • ✨迪米特法则(LoD)
    • 总结

在软件开发中, 设计原则是创建灵活、可维护和可扩展软件的基础。这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。在设计模式的世界中,这些设计原则是不可或缺的。在本文中,我们将介绍一些常见的设计原则,并了解它们在实际应用中的价值。

在这里插入图片描述

✨单一职责原则(SRP)

定义:

单一职责原则规定一个类应该只有一个引起变化的原因

换句话说,一个类应该只有一项职责。这有助于代码的清晰性和可维护性

当一个类负责过多的职责时,一旦需求变化,就会导致类的修改,可能引入错误

示例:

一个负责处理用户信息的类应该专注于用户信息的存储和查询,不应该包含与用户界面或日志记录相关的逻辑

✨开放/封闭原则(OCP)

定义:

开放/封闭原则表明软件实体应该是可以扩展的,但是不可修改的

这意味着我们应该通过扩展来引入新的功能,而不是通过修改现有代码来实现

示例:

使用接口和抽象类定义一组规范,然后通过实现这些规范来扩展功能,而不是直接修改已有的代码

✨里氏替换原则(LSP)

定义:

里氏替换原则强调派生类必须能够替代其基类而不引起程序错误

这使得继承关系更具弹性和可扩展性

示例:

如果一个基类是鸟,它有一个飞的方法,那么派生类如企鹅也应该能够替代基类,尽管它可能不会实现飞的方法

✨依赖倒置原则(DIP)

定义:

依赖倒置原则倡导高层模块不应该依赖于低层模块,二者都应该依赖于抽象

这有助于降低模块之间的耦合性

示例:

使用接口或抽象类定义高层模块的抽象,然后让低层模块依赖于这些抽象

✨接口隔离原则(ISP)

定义:

接口隔离原则提倡一个类不应该被强迫依赖它不使用的接口

一个类只应该依赖于它需要的接口

示例:

定义多个小而专注的接口,而不是一个大而全的接口,使得类只需实现它们所需要的接口

✨合成/聚合复用原则(CARP)

定义:

合成/聚合复用原则建议尽量使用合成/聚合,尽量不要使用继承

组合和聚合可以在运行时动态地改变对象的行为

示例:

使用合成将多个小的对象组合成一个新的对象,而不是通过继承复用代码

✨迪米特法则(LoD)

定义:

迪米特法则规定一个对象应该对其他对象有最少的了解

即一个类不应该知道太多关于其他类的内部细节。这有助于降低耦合性

示例:

通过委托和依赖注入,使得类仅依赖于它直接需要的类,而不是引入不必要的依赖

总结

这些设计原则不仅是理论上的指导,也是实际编码过程中的良好实践。它们提供了一个框架,可以帮助我们创建出稳定、可维护和易扩展的软件。通过理解这些原则,我们能够更好地应用设计模式,提高代码的质量和可读性。在实际项目中,遵循这些原则可以减少代码的复杂性,降低错误发生的可能性,使得代码更容易维护和升级。

相关文章:

【Java 设计模式】设计原则

文章目录 ✨单一职责原则(SRP)✨开放/封闭原则(OCP)✨里氏替换原则(LSP)✨依赖倒置原则(DIP)✨接口隔离原则(ISP)✨合成/聚合复用原则(CARP&#…...

Druid连接池工具公式化SQL附踩坑记录

1. 需求 使用Druid连接池工具格式化sql用于回显时候美观展示 2. 代码示例 2.1 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version> </dependency> 2.2 ParseUtils…...

Linux内核--网络协议栈(二)UDP数据包发送

目录 一、引言 二、数据包发送 ------>2.1、数据发送流程 三、协议层注册 ------>3.1、socket系统调用 ------>3.2、socket创建 ------>3.3、协议族初始化 ------>3.4、对应协议的socket创建 ------>3.5、协议注册 四、通过套接字发送网络数据 --…...

基于深度学习的时间序列算法总结

1.概述 深度学习方法是一种利用神经网络模型进行高级模式识别和自动特征提取的机器学习方法&#xff0c;近年来在时序预测领域取得了很好的成果。常用的深度学习模型包括循环神经网络&#xff08;RNN&#xff09;、长短时记忆网络&#xff08;LSTM&#xff09;、门控循环单元&a…...

nginx中多个server块共用upstream会相互影响吗

背景 nginx中经常有这样的场景&#xff0c;多个server块共用一个域名。 如&#xff1a;upstream有2个以上的域名&#xff0c;nginx配置两个server块&#xff0c;共用一个upstream配置。 那么&#xff0c;如果其中一个域名发生"no live upstreams while connecting to ups…...

基于信号完整性的一些PCB设计建议

最小化单根信号线质量的一些PCB设计建议 1. 使用受控阻抗线&#xff1b; 2. 理想情况下&#xff0c;所有信号都应该使用完整的电源或地平面作为其返回路径&#xff0c;关键信号则使用地平面作为返回路径&#xff1b; 3. 信号的返回参考面发生变化时&#xff0c;在尽可能接近…...

《BackTrader量化交易图解》第8章:plot 绘制金融图

文章目录 8. plot 绘制金融图8.1 金融分析曲线8.2 多曲线金融指标8.3 Observers 观测子模块8.4 plot 绘图函数的常用参数8.5 买卖点符号和色彩风格8.6 vol 成交参数8.7 多图拼接模式8.8 绘制 HA 平均 K 线图 8. plot 绘制金融图 8.1 金融分析曲线 BackTrader内置的plot绘图函…...

什么是欧拉筛??

欧拉筛&#xff08;Eulers Sieve&#xff09;&#xff0c;又称线性筛法或欧拉线性筛&#xff0c;是一种高效筛选素数的方法。它的核心思想是从小到大遍历每个数&#xff0c;同时标记其倍数为合数&#xff0c;但每个合数只被其最小的质因数标记一次&#xff0c;从而避免了重复标…...

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑩

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应处理&#xff0c;程序根据两个输入参数iRecordNum和IType计算x的值并返回。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码进行测试&#xff0c;测试类中设计最少的测试数据满足基路…...

使用WAF防御网络上的隐蔽威胁之SSRF攻击

服务器端请求伪造&#xff08;SSRF&#xff09;攻击是一种常见的网络安全威胁&#xff0c;它允许攻击者诱使服务器执行恶意请求。与跨站请求伪造&#xff08;CSRF&#xff09;相比&#xff0c;SSRF攻击针对的是服务器而不是用户。了解SSRF攻击的工作原理、如何防御它&#xff0…...

Redis基础系列-哨兵模式

Redis基础系列-哨兵模式 文章目录 Redis基础系列-哨兵模式1. 引言2. 什么是哨兵模式&#xff1f;3. 哨兵模式的配置4. 哨兵模式的启动和验证4.1 主master宕机&#xff0c;看会出现什么问题4.2 重启6379主机 5. 哨兵模式的工作原理和选举原理5.1. SDown主观下线&#xff08;Subj…...

【angular教程240112】09(完) Angular中的数据请求 与 路由

【angular教程240112】09(完) Angular中的数据请求 与 路由 目录标题 一、 Angular 请求数据简介0 使用Angular内置模块HttpClientModule和HttpClientJsonpModule:1 Angular中的GET请求:2 Angular中的POST请求:3 Angular中的JSONP请求:4使用Axios进行数据请求: 二、 详解 Angul…...

go中拷贝文件操作

一. 拷贝文件内容到另一个文件位置 // 拷贝文件内容到另一个文件里面 func copyContent() {filepath1 : "d:/abc.txt"filepath2 : "e:/eee.txt"// 读取内容data, err : os.ReadFile(filepath1) // 使用os.ReadFile函数读取指定路径的文件内容if err ! nil…...

未来气膜体育馆的发展趋势是什么?

未来气膜体育馆的发展趋势是多方面的&#xff0c;以下是其中几个方面的趋势。 起初&#xff0c;随着人们对体育运动的需求不断增加&#xff0c;气膜体育馆的建设和使用将成为一种趋势。气膜体育馆具有灵活性和可移动性的特点&#xff0c;可以快速搭建和拆除&#xff0c;能够适…...

通信扫盲(五)

系列文章目录 1 通信扫盲&#xff08;一&#xff09;&#xff1a; 通信的本质、通信发展史-各代移动通信的多祉技术、5G、6G应用场景/愿景、LTE是什么&#xff1f;3GPP是什么&#xff1f; 链接&#xff1a;通信扫盲&#xff08;一&#xff09; 2 通信扫盲&#xff08;二&…...

nbcio-boot项目的文件上传与回显处理方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…...

《动手学深度学习》学习笔记 第9章 现代循环神经网络

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知识&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…...

「HDLBits题解」Vector100r

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接&#xff1a;Vector100r - HDLBits module top_module( input [99:0] in,output [99:0] out );integer i ; always (*) beginfor (i 0 ; i <…...

如何制作专业商业画册,提升品牌形象

​随着市场竞争的日益激烈&#xff0c;商业画册作为展示企业形象和产品特点的重要载体&#xff0c;越来越受到企业的重视。然而&#xff0c;如何制作一份专业、有吸引力的商业画册&#xff0c;提升品牌形象呢&#xff1f; 在制作商业画册之前&#xff0c;首先要明确目标受众。根…...

vim升级和配置

vim升级和配置 1、背景2、环境说明3、操作3.1 升级VIM3.2 配置VIM3.2.1、编辑vimrc文件3.2.2、安装插件 1、背景 日常工作跟linux系统打交道比较多&#xff0c;目前主要用到的是Cenots7和Ubuntu18这两个版本的linux系统&#xff0c;其中Centos7主要是服务器端&#xff0c;Ubun…...

vLLM-v0.17.1在新闻聚合平台的应用:热点事件摘要生成服务

vLLM-v0.17.1在新闻聚合平台的应用&#xff1a;热点事件摘要生成服务 1. 技术背景与需求场景 新闻聚合平台每天需要处理海量新闻内容&#xff0c;如何快速生成准确、简洁的热点事件摘要成为关键挑战。传统方法依赖人工编辑或简单规则提取&#xff0c;效率低下且质量参差不齐。…...

开发者专属配置:OpenClaw+GLM-4-7-Flash优化命令行工作效率

开发者专属配置&#xff1a;OpenClawGLM-4-7-Flash优化命令行工作效率 1. 为什么开发者需要AI增强命令行&#xff1f; 作为每天与终端打交道的开发者&#xff0c;我经常遇到这样的困境&#xff1a;忘记复杂的grep参数组合、需要反复查阅历史命令、或是面对一长串docker compo…...

OpenClaw对接ollama模型:GLM-4.7-Flash接口配置详解

OpenClaw对接ollama模型&#xff1a;GLM-4.7-Flash接口配置详解 1. 为什么选择本地ollama部署GLM-4.7-Flash 去年我在尝试构建个人自动化工作流时&#xff0c;发现公有云API调用不仅费用高昂&#xff0c;还存在隐私顾虑。直到发现ollama这个轻量级模型运行框架&#xff0c;配…...

STM32串口通信实战:从零配置USART到数据收发(附代码)

STM32串口通信实战&#xff1a;从零配置USART到数据收发&#xff08;附代码&#xff09; 第一次接触STM32的串口通信时&#xff0c;我被各种术语搞得晕头转向——波特率、数据位、停止位、校验位...更别提那些看起来像天书一样的寄存器配置了。直到在项目中被逼着用USART和传感…...

【架构实战】数据库分库分表实战

一、为什么需要分库分表 当数据量超过单机数据库的承载能力时&#xff0c;分库分表成为必然选择&#xff1a; 单库数据量过亿&#xff1a;查询性能急剧下降单表数据量过大&#xff1a;索引效率降低&#xff0c;DML操作变慢连接数耗尽&#xff1a;数据库连接成为稀缺资源存储空间…...

WuliArt Qwen-Image Turbo新手教程:Prompt怎么写?效果不好怎么调?

WuliArt Qwen-Image Turbo新手教程&#xff1a;Prompt怎么写&#xff1f;效果不好怎么调&#xff1f; 刚接触WuliArt Qwen-Image Turbo&#xff0c;是不是感觉有点懵&#xff1f;看着那个简洁的输入框&#xff0c;心里琢磨着&#xff1a;“我该写点啥才能让它画出我想要的图&a…...

LFM2.5-1.2B-Thinking-GGUF开发者案例:为开源硬件项目自动生成README与API文档

LFM2.5-1.2B-Thinking-GGUF开发者案例&#xff1a;为开源硬件项目自动生成README与API文档 1. 项目背景与模型介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的一款轻量级文本生成模型&#xff0c;专为低资源环境优化设计。这个1.2B参数的模型采用GGUF格式封装&#xff0c;结…...

文档权限验证API:ONLYOFFICE Docs检查用户访问权限的完整指南

文档权限验证API&#xff1a;ONLYOFFICE Docs检查用户访问权限的完整指南 【免费下载链接】DocumentServer ONLYOFFICE Docs is a free collaborative online office suite comprising viewers and editors for texts, spreadsheets and presentations, forms and PDF, fully c…...

STEP3-VL-10B性能评测:10B参数模型在A100上吞吐量达18.7 token/s实测

STEP3-VL-10B性能评测&#xff1a;10B参数模型在A100上吞吐量达18.7 token/s实测 最近&#xff0c;阶跃星辰开源了一个让我眼前一亮的模型——STEP3-VL-10B。作为一个10B参数级别的多模态视觉语言模型&#xff0c;它的表现确实让人惊喜。我在A100上实测后发现&#xff0c;它的…...

ChatGPT越狱指令最新版:原理剖析与安全实践指南

ChatGPT越狱指令最新版&#xff1a;原理剖析与安全实践指南 最近在AI开发者圈子里&#xff0c;关于大语言模型“越狱”的话题又热了起来。所谓“越狱”&#xff0c;就是指通过各种技巧绕过模型内置的安全限制&#xff0c;让它回答一些原本被禁止的问题。作为开发者&#xff0c;…...