【设计模式】一文理解记住设计模式的原则

目录——阅读所需预计5-10分钟

  • 🎖️前言
    • 🎯单一职责原则
      • 📣1. 定义
      • 💞2. 定义很抽象,咱继续看
      • 🎉3. 举几个栗子
      • 💞4. 以上栗子出现了一个问题,单一职责的划分究竟可以分多细
      • 👉5. 怎么记住这个原则
    • 😜接口隔离原则
      • 😍1. 是不是觉得这个"隔离"和上面单一职责的"划分"很像,隔离意味着划分,不是一样的东西吗?怎么区别两者的区别呢
      • 🚀2.接口隔离原则主要体现在两个方面
        • 🐴2.1. 不要使用没有任何依赖关系的接口
        • 🧐为什么?
        • 🙆2.2 一个类对另一个类的依赖性应该建立在最小的接口上
    • 🐢3. 怎么记住这个原则
    • 🍑里氏替换原则
      • 💌1. 定义
      • 🌈2. 怎么记住他
      • 🎽3. 子类覆盖父类已实现的方法 ,我觉得没啥意义的原因
    • 📡依赖倒置原则
      • 😎1. 定义
      • 🙆2. 怎么理解他
      • 🤡3. 怎么记住他
    • 😜迪米特原则
      • 💎1. 定义
      • 🔍2. 怎么理解他
      • 🎖️3. 怎么记住他
    • 🎆开闭原则
      • 📣1. 定义
      • ❤️2. 怎么理解
      • 🎯3. 怎么记住他
  • 设计模式的分类
    • 创建型模式
    • 结构型模式
    • 行为模式

🎖️前言

本文只针对用几分钟快速了解设计模式的原则,更详细请查找更多资料

🎯单一职责原则

📣1. 定义

她规定一个类应该只有一个发生变化的原因

💞2. 定义很抽象,咱继续看

单一职责原则强调职责的分离,就是一个类只能负责一种职责行为

🎉3. 举几个栗子

  • SpringBoot的Main类,只有一个职责——启动项目
  • SpringMVC的Controller层,Service层,DAO层划分不同的职责
  • UserController对应一个职责——对用户相关职责
  • UserController的登录功能也可以分离成一个类——对应单一的登录职责

💞4. 以上栗子出现了一个问题,单一职责的划分究竟可以分多细

  • 规矩是人定的,符号业务需求就好
  • 一个用户控制类可以划分出登录类负责单一登录职责,需要看需求而定,如果登录方式有QQ,微信等多种方式,单独划分出登录控制类是合理的,但是如果只有一个账号密码登录方法,将其划分出来是否显得多余。

👉5. 怎么记住这个原则

  • 最典型的代表——记住SpringBoot的主函数是单一职责原则,看到他就想起:单一职责原则

😜接口隔离原则

😍1. 是不是觉得这个"隔离"和上面单一职责的"划分"很像,隔离意味着划分,不是一样的东西吗?怎么区别两者的区别呢

  • 单一职责原则是接口隔离原则的基础
  • 单一职责原则注重从职责的角度进行类或接口的划分
  • 在此基础上,接口隔离原则登场,注重接口使用的“精确性”和"最小化"
  • 如果还是很迷惑,没事继续往下看

🚀2.接口隔离原则主要体现在两个方面

🐴2.1. 不要使用没有任何依赖关系的接口
  • 简单来说就是不要使用那些完全没有必要实现的接口
  • 举个JDK源码的栗子——JDK的作者也犯过这个错
public static void main(String[] args){List<Object> list = Collections.emptyList();list.add(new Object());
}

我们执行这个代码会报错
图片.png

🧐为什么?

因为通过emptyList()创建的空集合是不支持add()方法的,但这不是重点,重点在于EmptyList对象实现了一个RandomAccess接口。
图片.png
因为 EmptyList对象实现了一个RandomAccess接口 ,意味着 emptyList()空对象要支持随机访问,但是从这个 emptyList()创建到销毁都不能add()进去一个对象,有谈何随机访问呢? 那这个 RandomAccess接口 就是无意义的。
所以 RandomAccess接口 违反了接口隔离原则,所以JDK作者也会犯错哈哈(虽然无伤大雅)

  • 所有再次强调接口隔离第一条原则: 不要使用没有任何依赖关系的接口
🙆2.2 一个类对另一个类的依赖性应该建立在最小的接口上
  • 简单理解就是把接口的按单一职责划分清楚,再给子类去实现使用
  • 再用JDK的代码举个例子

图片.png上面就将接口划分为

  • 支持随机访问
  • 支持序列化

所有总的来说,这就是接口隔离,在单一职责原则的基础上,不使用没有依赖关系的接口,对接口进行更精确,细化的划分,从而达到接口隔离的境界。

🐢3. 怎么记住这个原则

  • 接口隔离就是把不要的接口去掉,把(细糠)接口按单一职责分好留下来
  • 再次强调: 不要使用没有任何依赖关系的接口
  • 再次强调: 一个类对另一个类的依赖性应该建立在最小的接口上

🍑里氏替换原则

💌1. 定义

  • 子类需要实现父类所有抽象方法——(其实你一定会这么做的,不然编译器就爆红了)
  • 子类可以增扩自己的方法和属性
  • 子类重载覆盖父类已实现的方法(我觉得这个没啥实际意义,可以忽略这条,在下方阐述原因)

🌈2. 怎么记住他

  • 里氏的氏,联想到父子
  • 子承父业,子再发家
  • 子类继承父类已有的方法,子类增加自己的属性和方法

🎽3. 子类覆盖父类已实现的方法 ,我觉得没啥意义的原因

  • 从业务的角度,子类覆盖父类已实现的方法,可以通过静态委派调用被重载的父类的方法,但是搞那么复杂干嘛,我想用子类调用方法直接在子类新增想要的方法就行了,想用父类的就直接用,何必搞个静态委派折磨人。

📡依赖倒置原则

😎1. 定义

就是面向接口编程

🙆2. 怎么理解他

  • 去搜一下面向接口编程,此处不赘述,简单理解就是对多态的运用。

🤡3. 怎么记住他

  • 依赖倒置就是从依赖具体的对象倒置成依赖抽象的接口

😜迪米特原则

💎1. 定义

  • 最少知道原则

🔍2. 怎么理解他

  • 一个类对另一个类知道的越少越好,一个类只通过一个接口通信,但不会暴露内部细节给对方
  • 类比客户端和服务器,只需要暴露一个接口,内部怎么实现不关心

🎖️3. 怎么记住他

  • 迪 和 低谐音,低就是少
  • 即最少依赖原则

🎆开闭原则

📣1. 定义

对修改关闭,对扩展开放

❤️2. 怎么理解

不用修改已有的类,只通过新增代码,达到添加功能的目的

🎯3. 怎么记住他

  • 对修改关闭,对扩展开放

设计模式的分类

此处不展开

创建型模式

  • 工厂方法模式
  • 抽象工厂模式
  • 单例模式
  • 建造者模式
  • 原型模式

结构型模式

  • 适配器模式
  • 桥接模式
  • 装饰模式
  • 组合模式
  • 外观模式
  • 享元模式
  • 代理模式

行为模式

  • 策略模式
  • 模版方法模式
  • 观察者模式
  • 迭代器模式
  • 责任链模式
  • 命令模式
  • 备忘录模式
  • 状态模式
  • 访问者模式
  • 中介者模式
  • 解释器模式

~理解有限,有错再补
在这里插入图片描述

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

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

相关文章

【花艺电商】SpringBoot集成MyBatis-Plus、Swagger2、SpringSecurity、OAuth2等技术整合开发

目录 一、功能介绍 1. 说明 2. 功能实现 3. 技术应用 二、技术详述 1.MyBatis-Plus 主要体现 项目应用 2.SpringSecurity 应用作用 三、页面展示 1. 登入 2. 主页 3. 详情 4. 购物车 5. 订单 6. 沙箱支付 每篇一获 一、功能介绍 1. 说明 这个项目主要使用了…

基于SSM的校园线上订餐系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;vue\html 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…

OpenHarmony基于HDF简单驱动开发实例

背景 OpenHarmony-3.0-LTSqemu_small_system_demoliteos_aqemu 添加配置 device/qemu/arm_virt/liteos_a/hdf_config/device_info/device_info.hcs device_info 新增&#xff1a; sample_host :: host {hostName "sample_host";sample_device :: device {devic…

ASP.NET中小型超市管理系统源码

ASP.NET中小型超市管理系统源码 超市管理系统是专门为中小型超市打造的管理系统&#xff0c;可以方便管理时更加准确清晰的查看商品信息&#xff0c; 仓库出售与进货的信息&#xff0c;还有每一个部门员工的信息&#xff0c;也更加直观的体现出每一阶段的商品销售情况&#xf…

【VUE】无法加载文件 \node\vue.ps1,因为在此系统上禁止运行脚本。问题解决

问题描述 在VS Code中输入vue create -p dcloudio/uni-preset-vue uniapp-demo命令时报错 无法加载文件 D:\address\node\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi…

(aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器

1. 背景介绍 在先前的博客文章中&#xff0c;我们已经搭建了一个基于SRS的流媒体服务器。现在&#xff0c;我们希望通过Web接口来控制这个服务器的行为&#xff0c;特别是对于正在进行的 RTSP 转码任务的管理。这将使我们能够在不停止整个服务器的情况下&#xff0c;动态地启动…

UE5 使用动画模板创建多个动画蓝图

我们制作游戏的时候&#xff0c;角色会根据不同的武器表现出来不同的攻击动画&#xff0c;待机动画以及移动动画。如果我们在UE里面实现这个需求&#xff0c;是通过复制粘贴的方式修改&#xff0c;还是有更好的方式。 这里就需要介绍一下动画模板&#xff0c;我们可以将动画蓝图…

pycharm调整漂亮的颜色主题

主题样式&#xff1a; 一、设置主题为白色 二、pycharm 如何设置字体颜色 打开pycharm编辑器&#xff0c;file > settings > editor > color scheme > python > 你也可以直接用我资源中的配置好的文件

探索C语言中的水仙花数及其计算方法

在计算机科学与数学的交叉领域中&#xff0c;有一种特殊的整数被称为“水仙花数”&#xff0c;它是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff0c;153是一个典型的水仙花数&#xff0c;因为1 5 3 1 125 27 153。 下面&#xff0c;我们通过一段…

1.7数算PPT选择汇总,PTA选择汇总,计算后缀表达式,中缀转后缀、前缀、快速排序

PTA选择汇总 在第一个位置后插入&#xff0c;注意是在后面插入&#xff0c;而不是前面&#xff1b;要移动49&#xff0c;为50-I&#xff0c;第25个的话&#xff0c;移25个 如果是插在前面&#xff0c;就移动50&#xff0c;N-I1&#xff0c;注意是插在前面还是后面 删第一个&a…

虾皮上传产品软件:如何使用虾皮平台上传产品

在虾皮&#xff08;Shopee&#xff09;平台上&#xff0c;卖家可以通过多种方法来上传产品&#xff0c;以简化商品上架过程。本文将介绍一些常用的产品上传方法&#xff0c;帮助卖家选择最适合自己的方式。 先给大家推荐一款shopee知虾数据运营工具 知虾免费体验地址&#xff…

【Axure高保真原型】日期天数加减计算器

今天和大家分享日期天数加减计算器的原型模板&#xff0c;我们通过这个模板选择指定日期&#xff0c;然后填写需要增加或者减少的天数&#xff0c;点击确认按钮后&#xff0c;就可以计算出对应的结束日期&#xff0c;本案例提供中继器版的日期选择器&#xff0c;以及JS版的日期…

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析&#xff0c;由于几十个项目的网关请求数量很大&#xff0c;放在mysql不合适&#xff0c;MongoDB不适合分析&#xff0c;于是准备存放在clickhouse&#xff0c;clickhouse对于读写支持也比较友好&#xff0c;说干就干 1、在服务器中…

LUT预设.cube格式PR/达芬奇/FCP/剪映等视频电影调色预设LUTs

对于将标准镜头转换为让人想起高端电影的视觉冲击场景至关重要。这些LUT经过专业设计&#xff0c;以模仿电影行业中的电影质量、深度和情感&#xff0c;使其成为电影制作人、摄像师和内容创作者的理想选择&#xff0c;希望为你的作品带来专业的电影色彩。 电影LUT的类别&#…

STL标准库与泛型编程(侯捷)笔记4

STL标准库与泛型编程&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…

【Electron】 Vite项目 初始配置 scss

pnpm add -D sasssrc下面创建 styles/main.scss 文件 mian.ts 内引入 ./styles.scss 文件 import ./styles/main.scss 测试scss是否生效&#xff1a; styles/mian.scss :root{--mian:red; } App.vue <template><div>你好</div> </template><s…

红队打靶练习:EVM: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB wpscan get username get password MSF get shell 提权 get root get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interf…

基于zookeeper实现服务节点HA主备自动切换

文章目录 前言一、架构图和流程图二、流程说明1.服务启动初始化ZK、注册所有服务节点信息-MasterRegister2.创建、运行服务节点&#xff0c;并管理服务节点-LeaderSelectorZkClient。3.典型场景-调度服务单体执行-DigitalEmpTask 总结参考 前言 Spring Boot 主备切换可以采用数…

一文读懂「多模态大模型」

​ 学习资源 5-多模态大模型一统NLP和CV 1.多模态大模型的基本原理 2.常见的多模态大模型 https://www.bilibili.com/video/BV1NN41177Zp?p5&vd_sourcef27f081fc77389ca006fcebf41bede2d 3.多模态大模型如_哔哩哔哩_bilibili 强强联手&#xff01;科大讯飞和中科院终于把【…

模型 ECRS分析原则

系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。效能优化。 1 ECRS分析原则的应用 1.1 ECRS分析原则在企业管理中的应用-麦当劳的服务流程优化 取消&#xff08;Eliminate&#xff09;&#xff1a;麦当劳作为全球知名的快餐连锁企业&#…