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

news/2024/12/2 20:51:19/

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

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

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

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

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

📃 前言回顾


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

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

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

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

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

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

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

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

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

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

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

⚽设计原则总结

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

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

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

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

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

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

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

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

🏀设计模式分类

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

📫创建型模式

简介:

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

包括:

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

📪结构型模式

简介:

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

包括:

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

📬行为型模式

简介:

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

包括:

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

🌸 完结

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

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

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

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

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

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

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

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

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

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


http://www.ppmy.cn/news/44901.html

相关文章

基于Amazon S3的通用封装oss-spring-boot-starter,支持前端分片直传

前段时间使用minio-java封装了一个 minio-spring-boot-starter,但是有局限性,不能很好的支持各个云服务厂商的OSS服务,为此,利用 aws-java-sdk-s3 做一个统一的封装,兼容S3 协议的通用文件存储工具类 ,支持…

23北京邮电大学备考经验

目录【写在前面】本科成绩择校历程英语复习数学复习政治复习专业课复习其它建议笔记复盘压力处理恋爱关系【写在最后】【写在前面】 初试成绩: 本科成绩 总体:浙江某双非学校的软件工程专业、综合测评成绩班级前两名、浙江省省级优秀毕业生、发表过论…

每块硬盘最多可以有几个扩展分区?各个扩展分区最多可以有多少个逻辑驱动器?请高手告知,谢谢!

不同系统,不同分区方案,数量也有不同的。 Linux: 主分区最多4个 逻辑分区: SCSI 最多 16 个 IDE 最多 63 个 传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节&#xff0c…

C# 中的泛型

C# 中的泛型 泛型(Generic)是C# 2.0和通用语言运行时(CLR)的一个新特性,泛型为 .Net 框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时不必确定一个或多个参数,具体参数可以等到调用时候的代码声明和实现确定。这意味着使用泛型…

React | React的JSX语法

✨ 个人主页:CoderHing 🖥️ Node.js专栏:Node.js 初级知识 🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#…

多个渠道成功销售的秘诀速递

将您的电子商务业务扩展到多个渠道销售似乎是一项艰巨的任务吗?但如果有了正确的多渠道增长战略,这可能是实现快速增长的好方法。当然,您需要考虑借助一些工具与策略,而SaleSmartly(ss客服)可以为您提供。 …

minio 部署、迁移、使用

一、minio 部署 1、单节点部署 部署IP:192.168.206.10 1.1、下载minio的二进制文件 wget https://dl.min.io/server/minio/release/linux-amd64/minio 1.2、规划磁盘 minio 数据目录一定不能和 跟/ 在一个磁盘上,要单独挂载,比如规划将m…

Netty通信技术进阶二

Netty核心组件 1. Bootstrap2 Channel3. EventLoopGroup 和 EventLoop3.1 eventLoopThreads 是多少? 4. ChannelHandler & ChannelHandlerContext & ChannelPipeline4.1 复用Handler4.2 ChannelInboundHandlerAdapter or SimpleChannelInboundHandler 5. By…