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

news/2024/7/24 8:00:59 标签: 设计模式, java, 软件工程

阅读建议

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

  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.niftyadmin.cn/n/5179710.html

相关文章

ARPG----C++学习记录05 Section12 动画蒙太奇,收拿剑,MetaSound,调整动画

代码更新 https://github.com/BAOfanTing/ARPG_Game_Code/commit/c629270e49496ba1bcbaf03780d23c1842ca5e7a Animation Montages动画蒙太奇 蒙太奇的工作流程 新建一个鼠标左键的按键映射,下载一些攻击动画,重定向给我们的人物,新建一个动画…

Java Elasticsearch 按一定时间间隔(timeInterval)循环查询数据

最近有个需求&#xff0c;前端传入时间间隔&#xff0c;去elasticsearch按照时间间隔统计每个时间间隔内数据量。 public List<HashMap<String,Object>> getCount(RequestParam Integer time, RequestParam String selectedDatedTime) {SimpleDateFormat format n…

go-bindata - embed结合嵌入静态文件打包可执行二进制文件

## embed 嵌入静态文件到可执行二进制文件 # 安装go-bindata go get -u github.com/jteeuwen/go-bindata/... # 打包静态文件 go-bindata web/... 执行次命令之后会在项目目录下生成bindata.go文件,示例命令中模板文件都在项目的web目录下 # 使用embed注册模板示例文档 http…

Qt 自定义event

本文章从属于 Qt实验室-CSDN博客系列 自定义事件携带数据 在某些情况下&#xff0c;可能需要通过事件携带一些额外的数据 可以通过自定义事件类来完成 一种实现方法是自定义一个QObject的子类&#xff0c;通过property来携带数据 class MyEvent : public QObject,public …

第五章ARM处理器的嵌入式硬件系统设计——课后习题

1ARM处理器的工作状态 ARM处理器有两种工作状态。具体而言&#xff0c;ARM处理器执行32位ARM指令集时&#xff0c;工作在ARM状态&#xff0c;当ARM处理器执行16位thumb指令集时候&#xff0c;工作在thumb状态。 1ARM指令特点 1一个大的&#xff0c;统一的寄存器文件。 2基于…

混合开发(Android原生与H5交互) 说明文档

前言 目前&#xff0c;比如微信、QQ、淘宝、京东、知乎、各大银行App等大量软件都内嵌了部分H5。Android与H5&#xff08;JS&#xff09;互调可以让我们实现混合开发。混合开发就是在一个APP中内嵌一个轻量级的浏览器&#xff0c;一部分原生的功能改为Html5来开发。 拿微信举例…

间歇性工作的时钟波形对行sdc约束怎么写

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 如下图&#xff0c;紫色部分波形间歇式工作&#xff0c;如果要写约束应该怎么写&#xff1f; 答&#xff1a;按照最小周期写即可&#xff0c;只看active的部分&#xff0c;至于…

每个程序员都在找的免费API接口

免费好用的api接口&#xff0c;含免费次数&#xff1a; IP归属地-IPv6区县级&#xff1a;根据IP地址&#xff08;IPv6版本&#xff09;查询归属地信息&#xff0c;包含国家、省、市、区县和运营商等信息。IP归属地-IPv6城市级&#xff1a;根据IP地址&#xff08;IPv6版本&…