设计模式 七大原则
1.单一职责原则
单一职责原则(SRP:Single responsibility principle)又称单一功能原则
核心:解耦和增强内聚性(高内聚,低耦合)。
描述:
类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,
功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。
2.里氏替换原则
里氏替换原则(LSP:Liskov Substitution Principle)
核心:
在任何父类出现的地方都可以用他的子类来替代(子类应当可以替换父类并出现在父类能够出现的任何地方)
四层含义:
(1)子类必须完全实现父类的方法。在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。
(2)子类可以有自己的个性。子类当然可以有自己的行为和外观了,也就是方法和属性
(3)覆盖或实现父类的方法时输入参数可以被放大。即子类可以重载父类的方法,但输入参数应比父类方法中的大,这样在子类代替父类的时候,调用的仍然是父类的方法。
即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条
件相同或者更宽松。
(4)覆盖或实现父类的方法时输出结果可以被缩小。
3.依赖注入原则
依赖注入原则(DIP:Dependence Inversion Principle)
别名:依赖倒置原则或依赖反转原则
核心:要依赖于抽象,不要依赖于具体的实现
三层含义:
(1)高层模块不应该依赖低层模块,两者都应该依赖其抽象(抽象类或接口);
(2)抽象不应该依赖细节(具体实现);
(3)细节(具体实现)应该依赖抽象。
三种实现方式:
1、通过构造函数传递依赖对象 ;
2、通过setter方法传递依赖对象;
3、接口声明实现依赖对象 在Java中的表现:
(1)模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
(2)接口或抽象类不依赖于实现类;
(3)实现类依赖接口或抽象类
4.开闭原则
开闭原则(OCP:Open Closed Principle)
核心思想:对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模
块可以在不被修改的前提下被扩展。
根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。
扩展开放:
某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
修改关闭:
某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关的。
5.接口分离原则
接口分离原则(ISP:Interface Segregation Principle)
核心思想:
不应该强迫客户程序依赖他们不需要使用的方法。
接口分离原则的意思就是:一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口当中.
分离接口的两种实现方法:
1.使用委托分离接口。(Separation through Delegation)
2.使用多重继承分离接口。(Separation through Multiple Inheritance)
6.合成复用原则
合成复用原则(CRP:Composite Reuse Principle)
核心思想:
尽量使用对象组合,而不是继承来达到复用的目的。该原则就是在一个新的对象里面使用一些已有的对象,
使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。
复用的种类:
1.继承
2.合成聚合
注:在复用时应优先考虑使用合成聚合而不是继承
7.迪米特原则
迪米特原则(LOD:Law of Demeter)
又叫最少知识原则
核心思想:
一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。
(类间解耦,低耦合)意思就是降低各个对象之间的耦合,提高系统的可维护性;在模块之间只通过接口来通信,
而不理会模块的内部工作原理,可以使各个模块的耦合成都降到最低,促进软件的复用
注:
1.在类的划分上,应该创建有弱耦合的类;
2.在类的结构设计上,每一个类都应当尽量降低成员的访问权限;
3.在类的设计上,只要有可能,一个类应当设计成不变;
4.在对其他类的引用上,一个对象对其它对象的引用应当降到最低;
5.尽量降低类的访问权限;
6.谨慎使用序列化功能;
7.不要暴露类成员,而应该提供相应的访问器(属性)
UML统一建模语言,java中七种设计原则
UML统一建模语言。
类与类,类和接口,接口和接口之间的关系。
1、实现关系(一个类实现一个接口)
2、泛化关系(一个类继承另一个类)
3、关联(1)、依赖关系:一个类是另一个类的方法局部变量,方法的参数或方法返回值。2)、聚合关系:一个类是另一个类的属性,是整体和部分的关系。3)、组合关系:一个类是另一个类的属性,是整体不可分割的一部分,是强聚合。)
4、单一职责:一个类而言,应该仅有一个引起它变化的原因,永远不要让一个类存在多个改变的理。一个类只应该做和一个任务相关的业务,不应该把过多的业务放在一个类中完成。
迪米特法则:
一个软件实体应当尽可能少的与其他实体发生相互作用。
相关文章:
设计模式 七大原则
1.单一职责原则 单一职责原则(SRP:Single responsibility principle)又称单一功能原则 核心:解耦和增强内聚性(高内聚,低耦合)。 描述: 类被修改的几率很大,因此应该专注…...
(1)(1.13) SiK无线电高级配置(一)
文章目录 前言 1 监控链接质量 2 诊断范围问题 3 MAVLink协议说明 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 !Tip 大多数用户只需要 SiK Radio v2 中提供的基本…...
drf知识--10
接口文档 # 后端把接口写好后: 登录接口:/api/v1/login ---> post---name pwd 注册接口 查询所有图书带过滤接口 # 前后端需要做对接,对接第一个东西就是这个接口文档,前端照着接口文档开发 公司3个人ÿ…...
探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
mysql死锁排查
查看正在进行中的事务 SELECT * FROM information_schema.INNODB_TRX;字段解释trx_id唯一事务id号,只读事务和非锁事务是不会创建id的trx_state事务的执行状态,值一般分为:RUNNING, LOCK WAIT, ROLLING BACK, and COMMITTING.trx_started事务…...
若依项目(ruoy-vue)多模块依赖情况简要分析
主pom文件关键点分析 properties标签声明变量信息:版本号、编码类型、java版本spring-boot依赖形式:spring-boot-dependencies、pom、importdependencies中添加本项目内部模块,同时在modules中声明模块packaging打包选择pom设置打包maven-co…...
【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)
基于普中开发板51单片机的篮球计分器液晶LCD1602显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 基于51单片机的篮球计分器液晶LCD1602显示 ( pr…...
按照层次遍历结果打印完全二叉树
按照层次遍历结果打印完全二叉树 按照推论结果: l 层首个节点位置 2h-l - 1l 层节点间距:2h-l1 - 1 编码实现 public static<E> void print(BinaryTree<E> tree) {List<List<Node<E>>> levelNodeList levelOrderTraver…...
基于SpringBoot的药店管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的药店管理系统,java项目…...
Java 泛型深入解析
Java 中的泛型是一种强大的编程特性,允许我们编写更加通用和类型安全的代码。本篇博客将深入探讨 Java 泛型的各个方面,包括泛型类、泛型方法、泛型接口以及泛型通配符。 1. 泛型类 首先,让我们看一个简单的泛型类的例子。在下面的代码中&a…...
Apache Doris (六十): Doris - 物化视图
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录...
【javaweb】tomcat9.0中的HttpServlet
2023年12月28日,周四晚上 目录 什么是HttpServlet tomcat中的HttpServlet由谁产生 什么是HttpServlet 在Tomcat中,HttpServlet 是 Java Servlet API 中的一个抽象类,用于简化基于HTTP协议的Servlet的开发。HttpServlet 扩展了 GenericServ…...
数据结构学习笔记——查找算法中的树形查找(B树、B+树)
目录 前言一、B树(一)B树的概念(二)B树的性质(三)B树的高度(四)B树的查找(五)B树的插入(六)B树的删除 二、B树(一…...
python包chromadb安装失败总结
1,背景: 最近在学习langchain的课程,里面创建自己的知识库的Retrieval模块中,需要用到向量数据库。 所以按照官方的教程(vectorstores),准备使用chroma的向量数据库。图片来源 2,问…...
机器学习(四) -- 模型评估(2)
系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…...
泊松分布与二项分布的可加性
泊松分布与二项分布的可加性 泊松分布的可加性 例 : 设 X , Y X,Y X,Y 相互独立 , X ∼ P ( λ 1 ) X\sim P(\lambda_1) X∼P(λ1) , Y ∼ P ( λ 2 ) Y\sim P(\lambda_2) Y∼P(λ2) , 求证 Z X Y ZXY ZXY 服从参数为 λ 1 λ 2 \lambda_1 \lambda_2 λ1λ2 …...
【PostgreSQL】约束-排他约束
【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 排他约束 排他约束是一种数据库约束,用于确保某一列或多个列中的值在每一条记录中都是唯一的。这意味着任何两条记录都不能具有相同的值。 排他约束可以在数据库中创建唯一索引或唯一约束来实现。当尝试插入或更…...
Java重修第一天—学习数组
1. 认识数组 建议1.5倍速学习,并且关闭弹幕。 数组的定义:数组是一个容器,用来存储一批同种类型的数据。 下述图:是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢?为了解决在某些场景下,变…...
【C#】知识点实践序列之Lock的锁定代码块
大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正! 本篇验证Lock锁定代…...
StringBad ditto (motto)
第12章 类和动态内存分配 StringBad ditto (motto): // calls StringBad (comst StringBad &) StringBad metoo - motto: // calls StringBad (const StringBad &) StringBad also StringBad (motto): // calls StringBad (const StringBad &) StringBad * pStri…...
用PyTorch复现DKT模型:从Assistment数据集处理到LSTM训练全流程(附完整代码)
用PyTorch构建DKT模型:从数据预处理到LSTM实战全解析 在教育技术领域,追踪学生知识掌握程度一直是个核心挑战。想象一下,当学生在在线学习平台上完成一系列数学题时,系统如何预测他们下一步可能遇到的困难?这正是深度知…...
Midjourney Anthotype印相工作流全拆解(含v6.1专属--style raw+自定义光照映射公式)
更多请点击: https://intelliparadigm.com 第一章:Anthotype印相工艺的历史溯源与数字转译本质 Anthotype(植物感光印相)是一种诞生于1839年的前摄影术实践,由英国科学家Sir John Herschel首次系统记录。它利用植物汁…...
【信息科学与工程学】【通信工程】第四十三篇 骨干网方案设计-02跨境网络
一、方案 1.1 整体方案设计概要 设计的云网融合方案,综合考虑其全球互联需求、安全合规性、性能优化及跨国运营挑战: 1.1.1、需求分析 网络互联需求: 国内互通: 安全、稳定、低延迟连接中国大陆(严格合规要求)。 国际互通: 高性能连接美国(东西海…...
【信息科学与工程学】【人工智能】【知识工程】企业知识库管理与评估-第四篇-市场篇
一、企业价格知识管理参数体系 1.1、价格知识管理参数列表 内部交易价格参数 参数名称 参数定义 计算公式 计量单位 数据来源 部门间转移定价准确率 内部转移定价的准确程度 准确转移定价次数 / 总转移定价次数 100% % 财务系统、转移定价记录 成本中心计价合规率…...
前端状态管理:主流状态管理库对比与选型指南
前端状态管理:主流状态管理库对比与选型指南 前言 状态管理是前端开发中的核心问题。随着应用复杂度的增加,选择一个合适的状态管理库变得越来越重要。今天我就来给大家对比一下目前主流的状态管理库,帮助你做出最佳选择。 主流状态管理库概览…...
5个关键技巧:让魔兽争霸III在现代Windows系统流畅运行
5个关键技巧:让魔兽争霸III在现代Windows系统流畅运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Windows 10/11上…...
24GB 内存 M4 运行本地模型:虽有局限但乐趣与优势并存!
在配备 24GB 内存的 M4 上运行本地模型 2026 年 5 月 10 日,阅读时长 13 分钟。涉及 Elixir、大语言模型(LLM)、通义千问(Qwen)、LLM Studio。断断续续尝试在本地运行模型一段时间后,终于找到可行方案。虽输…...
清华PPT模板终极指南:告别PPT设计烦恼,轻松制作专业演示
清华PPT模板终极指南:告别PPT设计烦恼,轻松制作专业演示 【免费下载链接】THU-PPT-Theme 清华主题PPT模板 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme 还在为学术答辩、项目汇报的PPT设计而头疼吗?每次打开PowerPoin…...
Intel X710/X722网卡在ESXi下的‘隐形杀手’:识别并修复那4种导致网卡重置的神秘数据包
Intel X710/X722网卡在ESXi环境下的深度排障指南:从数据包异常到固件升级全解析 虚拟化环境中网络稳定性直接关系到业务连续性,而Intel X710/X722系列网卡在ESXi平台上的某些异常表现,往往让资深运维人员陷入反复排查的困境。不同于常见的网络…...
告别软件模拟!用GD32F303的硬件I2C0高效读写EEPROM(附小熊派工程源码)
深入解析GD32F303硬件I2C驱动EEPROM的工程实践 在嵌入式系统开发中,非易失性存储是保存配置参数、运行日志等关键数据的必备功能。传统软件模拟I2C虽然实现简单,但在通信效率和系统资源占用方面存在明显瓶颈。本文将基于GD32F303的硬件I2C0控制器&#x…...
