设计模式系列之最终篇:大盘点

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概4000多字,预计阅读时间长需要3分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

写在前面

        这篇文章是设计模式专栏系列的总结篇,本篇内容主要分为四个部分:

        第一部分:设计模式的专栏的盘点,点击相应的超链接可以跳转到指定的设计模式进行学习,建议收藏 。

        第二部分:设计模式的重点回顾;

        第三部分:设计模式的学习方法;

        第四部分:设计模式如何实战应用;

设计模式系列盘点

        设计模式一般分为三大类:创建型模式、结构型模式、行为型模式。

  • 创建型模式:用于创建对象,共六种,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
  • 结构型模式:用于处理类或对象的组合,共七种,包括适配器模式、装饰者模式、代理模式、门面模式、桥梁模式、组合模式、享元模式。
  • 行为型模式:用于描述类或对象怎样交互以及怎样分配职责,共十一种,包括策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式基础篇

设计模式之基础:UML类图怎么看?

设计模式之六大设计原则

创建型设计模式

设计模式之单例模式

设计模式之简单工厂模式

设计模式之工厂方法模式

设计模式之抽象工厂模式

设计模式之建造者模式

设计模式之原型模式

结构型设计 模式

设计模式之适配器模式

设计模式之装饰器模式

设计模式之代理模式

设计模式之门面模式

设计模式之桥梁模式

设计模式之组合模式

设计模式之享元模式

行为型设计模式

设计模式之策略模式

设计模式之模板方法模式

设计模式之观察者模式

设计模式之迭代器模式

设计模式之责任链模式

设计模式之命令模式

设计模式之备忘录模式

设计模式之状态模式

设计模式之访问者模式

设计模式之中介者模式

设计模式之解释器模式

示例源码

凡夫贩夫 / design-pattern-demo · GitCodeGitCode——开源代码托管平台,独立第三方开源社区,Git/Github/Gitlabicon-default.png?t=N7T8https://gitcode.net/fox9916/design-pattern-demo.git

重点回顾

单例模式

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这种模式常用于需要频繁创建和销毁同一对象的场景,以减少系统开销和资源浪费。

简单工厂模式

基于类的不同条件返回不同类的实例。这种模式主要解决的是创建多个具有相同属性和行为的对象时的问题。

工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。这种模式使得程序在创建对象时不会对外部产生依赖,并且可以实现对具体类实例的解耦。

抽象工厂模式

创建相关或依赖对象的家族,而无需明确指定具体类。这种模式主要用于创建一系列相关或相互依赖的对象,而不需要指定其具体类。

建造者模式

封装构建对象的复杂性,允许其以独立的步骤构建对象。这种模式适用于需要构建复杂对象的场景,通过将构建对象的步骤分解为独立的步骤,使得构建过程更加清晰和灵活。

原型模式

通过复制现有的实例来创建新的实例。这种模式常用于需要大量重复对象的场景,通过复制已有的实例来减少创建新对象的时间和资源开销。

适配器模式

将一个类的接口转换成客户希望的另外一个接口。这种模式主要用于解决两个接口不兼容的问题,使得原本无法协同工作的类可以协同工作。

装饰器模式

动态地给对象添加新的功能。这种模式通过动态地创建一个包含原始对象的新对象,并在新对象中添加新的功能,从而实现了一种灵活且可扩展的对象结构。

代理模式

为其他对象提供一个代理以控制对这个对象的访问。这种模式通过创建一个代理对象来控制对原始对象的访问,从而实现对原始对象的保护和对访问过程的控制。

门面模式

提供统一的方法来访问子系统的一群接口。这种模式通过对外提供一个统一的接口,使得客户端可以方便地访问子系统中的一组接口,从而简化客户端的代码复杂度。

桥梁模式

将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种模式通过将抽象和实现部分分离,使得抽象和实现可以独立地变化和扩展,从而提高了系统的灵活性和可维护性。

组合模式

将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端代码可以统一地处理单个对象和组合对象,从而提高代码的复用性和可维护性。

享元模式

运用共享技术有效地支持大量细粒度的对象。这种模式主要用于解决大量相似对象的创建和销毁问题,通过共享对象来减少系统开销和资源浪费。

策略模式

定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。这种模式主要用于处理一系列可互换的算法或策略,使得客户端可以根据实际情况选择合适的策略进行使用。

模板方法模式

定义一个操作中的算法骨架,将某些步骤延迟到子类中实现。这种模式主要用于定义一个操作的算法骨架,并将某些步骤延迟到子类中实现,从而提高代码的复用性和灵活性。

观察者模式

定义对象之间的依赖关系,当一个对象改变状态时则自动通知其依赖者。这种模式主要用于建立对象之间的依赖关系,使得当一个对象的状态发生改变时能够自动通知其依赖者。

迭代器模式

提供一种方法来顺序访问聚合对象的各个元素,而不暴露其底层表示。这种模式主要用于遍历聚合对象的各个元素,而不暴露其底层表示,从而提高代码的封装性和安全性。

命令模式

将请求或操作封装成一个对象,从而允许将客户端和接收者解耦。这种模式主要用于将请求或操作封装成一个对象,从而解耦客户端和接收者之间的关系,提高系统的可维护性和可扩展性。

责任链模式

将请求沿着链传递给下一个接收者,直到找到处理该请求的接收者为止。这种模式主要用于处理一系列处理请求的接收者,通过将请求沿着链传递给下一个接收者,直到找到处理该请求的接收者为止,从而提高系统的可扩展性和灵活性。

备忘录模式

保存一个对象的内部状态并将其恢复到先前的状态。这种模式主要用于保存和恢复对象的内部状态,使得对象可以在必要时恢复到先前的状态。

状态模式

状态模式的核心是将一个对象的状态改变为它的子类,根据它的状态来改变其行为。这种模式可以帮助一个对象在其状态改变时改变其行为,使得程序逻辑更清晰,更容易维护和扩展。

访问者模式

访问者模式的核心是将操作逻辑从数据结构中分离出来,通过访问者对象来操作数据结构中的元素。这种模式可以减少对数据结构的修改,提高代码的可重用性和可维护性。

中介者模式

中介者模式的核心是定义一个中介者对象,将多个对象之间的通信解耦,使它们之间保持松散耦合。这种模式可以减少对象之间的依赖,提高代码的可维护性和可扩展性。

解释器模式

解释器模式的核心是定义一个解释器对象,用于解释和执行一种特定语言的语法规则。这种模式可以简化对复杂语法的处理,提高代码的可读性和可维护性。

学习方法

        软件工程中的设计模式,本身就是一种方法论,想学习好并掌握它,更需要一定的方法和技巧:

  • 理论学习:首先,可以通过阅读相关的书籍和技术博客,了解设计模式的基本概念、分类、应用场景等理论知识。强烈向小伙伴推荐我的技术博客中的《设计模式专栏》,它详细介绍了梳理种常见的设计模式的概念及其原理、应用和实现方法。
  • 掌握基础语言知识:设计模式的学习需要具备一定的编程基础,如果是Java程序员,面向对象编程(OOP)的基础知识,如类、对象、继承、多态等是必须要掌握的,因此我的《设计模式专栏》的第一篇就是和大家分享如何通过UML类图来看清楚,类与类之间的关系。
  • 实践项目:理论学习是基础,但只有通过实践才能真正掌握设计模式。可以选择一些小型的项目或者案例,尝试使用设计模式来解决实际问题。例如,可以使用工厂模式来管理对象的创建,用观察者模式实现事件驱动的系统等。通过实践,可以加深对设计模式的理解和掌握,需要特别注意的是在实际业务场景应用中,有可能不会完全符合某个设计模式的定义,也有可能在某个业务场景中,需要某两种及以上设计模式结合起来使用。
  • 参与社区和论坛:参与社区和论坛的讨论,了解其他开发者是如何应用设计模式的,同时也可以分享自己的经验和问题。
  • 反思和总结:在学习过程中,要不断反思和总结,思考每种设计模式的应用场景、优缺点以及与其他模式的区别和联系。同时,也要反思自己在使用设计模式的过程中出现的错误和不足,并加以改进。
  • 持续学习和更新知识:设计模式的发展是随着软件工程的发展而不断演进的,因此需要持续学习和更新知识。关注最新的技术趋势和最佳实践,了解新的设计模式和解决方案,以保持自己的竞争力。

        总之,软件工程中的设计模式的学习需要理论和实践相结合,不断反思和总结,同时保持持续学习和更新知识。只有这样,才能不断提高自己的软件设计和开发能力。

实战应用

要将设计模式应用到具体的业务场景中,可以按照以下步骤进行:

  1. 分析业务需求和问题:首先需要了解业务的需求和问题,包括业务流程、数据结构、用户界面等方面。分析业务需求和问题可以帮助你了解问题的本质和需求,为选择合适的设计模式打下基础。
  2. 选择合适的设计模式:根据业务需求和问题,选择合适的设计模式来解决特定的问题。在设计模式的选择上,需要考虑设计模式的意图、适用性、可扩展性等方面。同时,还需要考虑设计模式的应用范围,例如单例模式适用于全局唯一的对象,工厂模式适用于创建对象的逻辑封装等。
  3. 抽象和泛化:将业务需求和问题抽象为一般性的解决方案,并能够将该方案应用到类似的问题中。抽象和泛化可以帮助你更好地理解和应用设计模式,提高代码的可维护性和可扩展性。
  4. 实现设计模式:根据选择的设计模式和抽象的解决方案,实现相应的代码。在实现设计模式时,需要注意代码的可读性、可维护性和性能等方面的问题。
  5. 测试和调试:完成设计模式的实现后,需要进行测试和调试。测试主要包括单元测试、集成测试和系统测试等,确保代码的正确性和稳定性。同时,在调试过程中需要注意代码的逻辑、性能和异常处理等方面的问题。
  6. 优化和改进:根据测试结果和实际使用情况,对代码进行优化和改进。优化主要包括代码重构、性能优化等方面,改进则包括对代码的可读性、可维护性和可扩展性等方面的改进。
  7. 总结和反思:在设计模式应用过程中,需要不断总结和反思。总结成功的经验和失败的教训,反思代码的设计和实现过程,以便更好地应用设计模式来解决实际问题。

        总之,将设计模式应用到具体的业务场景中需要具备一定的抽象和泛化能力,同时需要注意理解业务需求和问题、选择合适的设计模式、实现细节的正确性、进行测试和验证以及不断优化和完善等方面的问题。在实际应用中,需要结合具体的问题和需求来进行综合考虑,选择合适的设计模式来解决特定的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

盘点72个Python网站项目Python爱好者不容错过

盘点72个Python网站项目Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/12twY8iZYhAG8BuyYXM7_bw?pwd8888 提取码:8888 项目名称 dailyfreshpython…

拼图游戏,开源代码

拼图游戏 最近玩了玩孩子的拼图游戏,感觉还挺好玩的,心血来潮要不动手做一个吧,偷懒摸鱼的时候可以来一把。 以下就是拼图游戏的界面截图。 体验地址 代码开源地址 心得体会 虽说是一个小游戏,但是需要注意的地方还是挺多的 方…

技术探秘:开发抖音小程序实现餐饮团购的关键步骤

本文将深入研究在抖音小程序上开发餐饮团购功能的关键步骤,揭示技术探秘背后的秘密。 一、了解抖音小程序开发环境 注册成为抖音小程序开发者,配置开发工具,并确保您的开发环境设置正确,以便顺利进行后续的开发工作。 二、制定团…

在 Android 上简单安全地登录——使用凭证管理器和密钥

我踏马很高兴地听说, Credential Manager的公开版本将于 11 月 1 日开始提供。Credential Manager 为 Android 带来了身份验证的未来,简化了用户登录应用程序和网站的方式,同时使其更加安全。 登录可能具有挑战性 - 密码经常使用&#xff0c…

C#中数组、ArrayList与List对象的区别及使用场景

在C#编程中,数组、ArrayList和List对象是常用的数据结构和容器。它们在存储和管理数据方面都有各自的特点和用途。本文将深入探讨这三者的区别,并通过实际的代码示例来说明它们的使用场景和优缺点。 目录 1.数组特点使用场景 2.ArrayList特点使用场景 3.…

windows10上使用Visual Studio对树莓派进行交叉编译示例

本文主要介绍通过Visual Studio对树莓派进行交叉编译的方法。 1 环境 宿主机: 系统:Windows10 开发平台:Visual Studio 2022 (我用的是社区版) VisualGDB: VisualGDB - Download (我下的试用版本) GNU工具链: Prebuilt GNU toolchain f…

python matlplotlib/seaborn 绘制曲线的平均值标准差阴影图

1. seaborn 旧版本(0.8.1)中使用tsplot,新版本中使用lineplot 直线代表均值,阴影代表meanstd(带有置信区间,参数ci) import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as p…

647. 回文子串 516.最长回文子序列

647. 回文子串 题目: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相…

负公差轧钢测径仪 多规格可定制 普通智能随意选择

负公差轧制的意义: 轧钢厂生产的螺纹钢是按理论重量销,因此稳定的高负差产品极具市场竞争力。负差率即实际重量与理论重量的差值,除以理论重量,乘100%。以螺纹12为例,不按负差生产,在坯重2450kg的情况下&am…

Windows装机必装软件|每款都好用到起飞!

1.GeekUninstaller:这款软件是一款功能强大的卸载工具,可以完全删除无用的程序和插件,并清理与之相关的文件夹。它没有广告或捆绑软件,非常干净。 2.PotPlayer:作为一款纯粹的播放器,PotPlayer可以流畅播放…

KOSMOS-G-图像文本结合控制生成

文章目录 摘要引言算法多模态语言建模图像解码器对齐微调instruction 实验结论 论文: 《Kosmos-G: Generating Images in Context with Multimodal Large Language Models》 github: https://github.com/microsoft/unilm/tree/master/kosmos-g 摘要 当…

喜报不断!箱讯平台获评2023年上海市促进现代航运服务业创新示范项目

近期,可谓捷报频传!在箱讯科技子公司苏州箱讯获评苏州市软件和信息服务业 “头雁”培育企业没过多久,就又迎来好消息! 日前,上海市交通委发布“2023年上海市促进现代航运服务业创新项目”评选结果,箱讯An…

桌面便签软件用哪个?10款全球好用的便签软件推荐,告别杂论无章!

在如今的快节奏社会中,我们的生活和工作节奏越来越快,每天面对的信息成倍地增长。有时候,我们需要随手记下一些重要的事情,或者是一些突然的灵感,这时候就需要一款好用的桌面便签软件。 桌面便签软件可以帮助我们更好…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼,有着大片的既视感。那怎么才能拍出360球形照片呢?它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理,从而达到沉浸式体验的效果。俗话说“工欲善其事,必先利其…

《深入浅出.NET框架设计与实现》阅读笔记(四)

静态文件系统 通过ASP.NET Core 提供的静态文件模块和静态文件中间件,可以轻松的让应用程序拥有访问静态文件的功能,同时可以基于IFileProvider对象来自定义文件系统,如基于Redis做扩展文件系统 启动静态文件服务 在Program.cs 类中&#x…

ERP是什么意思?看这一篇就够了!

如果你身在制造业,那么一定对ERP不陌生。天天把ERP挂在嘴边,但你真的了解什么是ERP吗?本篇文章将介绍以下几点:1.ERP是什么意思;2.ERP的功能;3.ERP的落地案例。 一、ERP是什么意思 ERP是企业资源计划&…

【Apache Doris】审计日志插件 | 快速体验

【Apache Doris】审计日志插件 | 快速体验 一、 环境信息1.1 硬件信息1.2 软件信息 二、 审计日志插件介绍三、 快速 体验3.1 AuditLoader 配置3.1.1 下载 Audit Loader 插件3.1.2 解压安装包3.1.3 修改 plugin.conf 3.2 创建库表3.3 初始化3.4 验证 一、 环境信息 1.1 硬件信…

【机器学习5】无监督学习聚类

相比于监督学习, 非监督学习的输入数据没有标签信息, 需要通过算法模型来挖掘数据内在的结构和模式。 非监督学习主要包含两大类学习方法: 数据聚类和特征变量关联。 1 K均值聚类及优化及改进模型 1.1 K-means 聚类是在事先并不知道任何样…

Vue项目的学习一

1、Vue项目里面的.js文件里面对象添加属性 例如:在对象:row,需要在对象row里面添加一个属性状态:type,使用里面的Vue.set函数 Vue.set(参数1,参数2,参数3) Vue.set(row,type,false)解析: 参数1&#xff1…

不应该被忽视的10个好用的PDF文档修改器

您在寻找最好的免费开源 PDF 编辑器吗?您是否正在寻找免费编辑 PDF 文档的解决方案?如果您正在寻找此类问题的答案。那么,亲爱的朋友,您来对地方了,因为今天,在本文中,我将讨论一些适用于 Windo…
最新文章