贯穿设计模式第八话--设计原则总结篇

news2024/11/14 13:42:18

🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳

从今天开始,将开启一个专栏,【贯穿设计模式】,设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。为了能更好的设计出优雅的代码,为了能更好的提升自己的编程水准,为了能够更好的理解诸多技术的底层源码, 设计模式就是基石,万丈高楼平地起,一砖一瓦皆根基。 ✨✨欢迎订阅本专栏✨✨

🥺 本人不才,如果文章知识点有缺漏、错误的地方 🧐,也欢迎各位人才们评论批评指正!和大家一起学习,一起进步! 👀

❤️ 愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海! ❤️

💬 最后,希望我的这篇文章能对你的有所帮助! 🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!

📃 前言回顾


​ 🔥【贯穿设计模式】第一话·设计模式初介绍和单一职责原则🔥

​ 🔥【贯穿设计模式】第二话·设计模式的七大原则之开闭原则🔥

​ 🔥【贯穿设计模式】第三话·设计模式的七大原则之依赖倒转🔥

​ 🔥【贯穿设计模式】第四话·设计模式的七大原则之里氏替换🔥

​ 🔥【贯穿设计模式】第五话·设计模式的七大原则之接口隔离🔥

​ 🔥【贯穿设计模式】第六话·设计模式的七大原则之迪米特法则🔥

​ 🔥【贯穿设计模式】第七话·设计模式的七大原则之合成复用🔥

在第五篇文章中,我们了解设计模式的七大原则中第七个原则: 合成复用原则;

我们来回顾下,它的定义:尽量使用合成/聚合的方式,而不是使用继承,在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。

并且我们通过学生每学期上课得不同的例子讲述了代码未使用合成复用原则带来的类耦合度增高的问题。

值得注意的是:合成复用原则向我们传达的设计理念是:优先考虑使用“合成”复用,其次在使用“继承”,并不是不使用“继承”。

⚽设计原则总结

今天我们将来总结下学习过的设计原则,以及后续学习设计模式的分类

设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)

设计原则的最主要核心思想:

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
  2. 针对接口编程,而不是针对实现编程。
  3. 为了交互对象之间的松耦合设计而努力。

设计模式遵循着这七大原则:

  • 开闭原则是总原则(要求我们对扩展开放,对修改关闭,即抽象架构,扩展实现)
  • 单⼀职责原则(要求我们现类要职责单一,即⼀个类和方法只做⼀件事 )
  • 依赖倒置原则(要求我们要面向接口编程细节,即依赖抽象,下层依赖上层)
  • 里氏替换原则(要求我们不要破坏继承体系,即子类可扩展替代父类)
  • 接口隔离原则(要求我们设计接口的时候要精简单一,即建立单⼀接口)
  • 迪米特法则(要求我们降低类之间的耦合,即对类最少知道,尽量降低耦合)
  • 合成复用原则(要求我们尽量使用合成/复用的方式,即尽量使用组合/聚合的方式)

而设计模式就是通过这七个原则,来指导我们如何做一个好的设计,它是一套方法论,一种高内聚、低耦合的设计思想。当然我们可以在此基础上自由的发挥,甚至设计出符合自己系统的一套设计模式。

当然学习设计模式,必须深入到到某一个特定的业务场景中去,再结合对业务场景的理解和领域模型的建立,才能体会到设计模式思想的精髓;也必须多取了解好的设计模式是如何编写的,好的源码是如何使用到设计模式的,这都是后续需要增加学习的地方。

🏀设计模式分类

不同设计模式的复杂程度、 细节层次以及在整个系统中的应用范围等方面各不相同。 常用的设计模式可以概括为23种,而其中可以按照特点将其分为三大类型:

📫创建型模式

简介:

能够提供创建对象的机制,创建型模式用于解耦对象的实例化过程,增加已有代码的灵活性和可复用性。

包括:

  • 单例模式(确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点)
  • 工厂方法模式(在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型,工厂方法使一个产品类的实例化延迟到其工厂的子类)
  • 抽象工厂模式(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类)
  • 建造者模式(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)
  • 原型模式(允许一个原型对象再创建另外一个可定制的对象,无需知道如何创建的细节,直接通过克隆的方式创建一个新对象)

📪结构型模式

简介:

用于介绍将类或对象按某种布局组成一个更大的结构,并同时保持结构的灵活和高效。

包括:

  • 代理模式(代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理)
  • 适配器模式(将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作)
  • 装饰模式(不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式)
  • 外观模式(提供一个统一的接口,用来访问子系统中的一群接口)
  • 桥接模式(将抽象与实现分离,使它们可以独立变化)
  • 组合模式(将对象组合成树形结构以表示“部分-整体”的层次结构)
  • 享元模式(用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用)

📬行为型模式

简介:

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责,负责对象间的高效沟通和职责委派。

包括:

  • 策略模式(针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换)
  • 模板方法模式(抽象类中定义一个操作中算法的骨架,而将算法的一些步骤延迟到子类中)
  • 观察者模式(多个对象间存在一对多的依赖关系,每当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新)
  • 迭代器模式(提供一种方法来访问聚合对象中的一系列数据,而不用暴露这个对象的内部表示)
  • 责任链模式(为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链)
  • 命令模式(将请求转换为一个包含与请求相关的所有信息的独立对象)
  • 备忘录模式(允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态)
  • 状态模式(能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样)
  • 访问者模式(能将算法与其所作用的对象隔离开来)
  • 中介者模式(能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作)

🌸 完结

(注:有些内容或者图片来自https://refactoringguru.cn/design-patterns/catalog)

相信各位看官看到这里大致都对设计模式中的设计原则有了全部了解吧,设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础。

,开闭原则实际上的定义就是扩展开放,对修改关闭,提高软件系统的可复用性及可维护性。

学好设计模式,让你感受一些机械化代码之外的程序设计魅力,也可以让你理解各个框架底层的实现原理。最后,祝大家跟自己能在程序员这条越走越远呀,祝大家人均架构师,我也在努力。 接下来我们就要正式进入设计模式的学习,设计模式也有三大分类,明天我们将要学习的是创建型模式的单例模式 (面试,源码必备的一个重要模式)💪💪💪

文章的最后来个小小的思维导图:

🧐 本人不才,如有什么缺漏、错误的地方,也欢迎各位人才们评论批评指正!🤞🤞🤞

🤩 当然如果这篇文章确定对你有点小小帮助的话,也请亲切可爱的人才们给个点赞、收藏下吧,非常感谢!🤗🤗🤗

🥂 虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!✨✨✨

💟 感谢各位看到这里!愿你韶华不负,青春无悔!让我们一起加油吧! 🌼🌼🌼

💖 学到这里,今天的世界打烊了,晚安!🌙🌙🌙

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

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

相关文章

在uos上编译opencv

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 下载源码并创建build文件夹 系统环境为操作系统为:UnionTech OS Server 20 Enterprise,处理器为: 华为鲲鹏处理器(ar…

C++11(上)

目录 1:列表初始化 2:std::initializer_list 3:变量类型推导 3.1:auto推导类型 3.2:decltype 3.3:nullptr 4:范围for 5:STL新增容器和容器新增接口 5.1:array 6:左值引用和右值引用 6.1:左值 6.2:右值 6.3:左值引用 6.4:右值引用 6.5:左值…

python常用库之time库

目录 一、前言time库中的常用函数 二、time()函数三、localtime()和gmtime()函数四、strftime() 、asctime()、mktime()函数(一)strftime()函数(二)asctime()函数(三)mktime()函数 五、ctime()函数六、stri…

【2023最新】超详细图文保姆级教程:App开发新手入门(5)

上文回顾,我们已经完成了一个应用的真机调试,本章我们来了解一下如何引入YonBuilder移动开发的(原生)移动插件, 并利用移动插件完成一个简单的视频播放器。 8. 「移动插件」的使用 8.1 什么是 「移动插件」? 用通俗…

TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5

原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的…

【高危】Apache Spark 权限提升漏洞(CVE-2023-22946)

漏洞描述 Apache Spark 是一款支持非循环数据流和内存计算的大规模数据处理引擎。 使用 spark-submit 脚本在集群中启动任务可以通过指定proxy-user参数限制运行用户。在 Apache Spark 受影响版本中,攻击者通过指定自定义的classpath,则可以覆盖该配置…

2023最新面试题-Java-3

IO流 1. java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流 的角色划分为节点流和处理流。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱&…

ChatGPT 70+款可以免费使用的AI工具,建议收藏

ChatGPT风靡全球,人人可用! 小红书上有关ChatGPT的笔记已有10w篇,相关话题浏览量也达到了1.12亿次。其中讨论最为热烈的,要数“ChatGPT使用教程”。(当然,类似的话题还包括,教你如何使用Midjour…

Navicat图表查看器 Crack

Navicat图表查看器 Crack Navicat图表查看器是一个查看图表工作区文件的简单工具。您可以浏览Navicat的图表工具和Navicat图表创建者创建的区域。 Navicat图表查看器,将图表中的数据显示为强大的可视化效果,允许您使用图形和图表查看数据。 将您的信息转…

Internet Download Manager(IDM)v6.41.11 免激活不弹窗版

Internet Download Manager(IDM)v6.41.11 免激活不弹窗版可提升你的下载速度多达5倍,安排下载时程,或续传一半的软件。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机宕机甚至无预警的停电导致下传到一半…

大数据开发必备面试题Flume篇合集

大数据开发必备面试题Flume篇合集 1 、详细介绍Flume有哪些组件?2、你是如何实现Flume数据传输的监控的?3、Flume参数怎么调优?4、简述下Flume的事务机制。5、 Flume采集数据会丢失吗?6、简述下Flume使用场景。7、简述下 Flume丢包问题。8、…

【C语言】文件操作

目录 1.为什么使用文件 2.什么是文件 2.1 程序文件 2.2 数据文件 2.3文件名 3.文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 4.程序的顺序读写 4.2对比一组函数 5.文件的随机读写 5.1 fseek 5.2 ftell 5.3 rewind 6.文本文件和二进制文件 7.文件读取结束的…

2023年银行理财子公司研究报告

第一章 行业发展概况 1.1 行业概况 所谓“银行理财子公司”,其实就是由商业银行作为控股股东发起设立的,并经国务院银行业监督管理机构批准;主要从事理财业务;独立于母行,具有独立法人地位的非银行金融机构。像工商银…

Redission分布式锁

实现过程: 只要线程一加锁成功,就会启动一个 watch dog 看门狗,它一个后台线程, 会每隔 10 秒检查一下,如果线程 1 还持有锁,那么就会不断延长锁 key 生存时间。因此,Redisson 解决了锁过期释放…

Commitizen规范git提交代码

首先全局安装Commitizen,运行: npm install -g commitizen 然后在项目中开启终端,安装cz-customizable npm i cz-customizable --save-dev 然后在package.json中配置如下代码: "config": {"commitizen":…

虹科干货| 虹科Redis企业版数据库:告别游戏卡顿,让快乐加速!

“卡顿一分钟,玩家两行泪” 游戏已成为年轻人最主要的消遣娱乐方式之一,游戏卡顿给玩家带来糟糕游戏体验背后的原因是什么?数据存储与查询速度不够快! 游戏开发领域,不仅拥有海量的数据,甚至还要做到实时…

Flowable6.x导出/查看/跟踪流程图

Flowable6.x导出/查看/跟踪流程图 项目源码仓库 Flowable诞生于Activiti,是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义,可以十分灵活地加入你的应用/服务/构架。 本文介绍4种绘制流程图的方式,前…

TryHackMe-Set(Windows渗透测试 | WinDefender免杀)

Set 您再次发现自己在Windcorp公司的内部网络上。上次你去那里的味道真好,你回来了 了解更多。 但是,这次他们设法保护了域控制器,因此您需要找到另一台服务器,并在第一次扫描时发现“Set”。 Set被用作开发人员的平台&#xf…

集团企业大数据治理解决方案word

第一章 集团企业大数据治理阶段目标 通过数据平台和BI应用建设,集团企业大数据将搭建统一的大数据共享和分析平台,对各类业务进行前瞻性预测及分析,为集团企业各层次用户提供统一的决策分析支持,提升数据共享与流转能力。 一.1、…

Redis持久化的几种方式

Redis 持久化也是 Redis 和 Memcached 的主要区别之一,因为 Memcached 是不具备持久化功能的。 1.持久化的几种方式 Redis 持久化拥有以下三种方式: 快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的…