设计模式系列之最终篇-汇总

165 阅读13分钟

image.png

前言

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

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

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

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

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

设计模式系列盘点

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

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

设计模式基础篇

掌握UML类图:打开系统设计的新视界

六大设计原则,设计模式的灵魂与精髓

创建型设计模式

设计模式之单例模式:不同实现方式的深度解析

掌握简单工厂模式:高效开发的必备利器

工厂方法模式:改变你对软件开发的认知

抽象工厂模式:角色解析与应用探索

掌握建造者模式:构建复杂对象的灵活解决方案

解密原型模式:工作原理与实际应用

结构型设计 模式

适配器模式揭秘:让不兼容的组件完美协同

剖析装饰器模式:让你的代码更灵活、可扩展

探秘代理模式:核心原理与应用实践

优雅的程序设计:掌握门面模式的奥秘

桥梁模式:解耦抽象与实现的秘诀

组合模式揭秘:如何构建可扩展的树形结构

提升软件性能的秘密武器:揭秘实战中的享元模式

行为型设计模式

策略模式:让你的代码灵活应对不同场景

提高代码复用性与可维护性:深入剖析模板方法模式

观察者模式揭秘:实现松耦合的事件通知机制

迭代器模式揭秘:如何优雅应对数据遍历

责任链模式:将复杂逻辑轻松分解 - 掘金 (juejin.cn)

探索命令模式:构建灵活、可维护的软件架构

深入解析备忘录模式:轻松实现状态保存和恢复

优雅地管理对象状态:深入剖析状态模式

解耦数据结构与操作:深入理解访问者模式

解耦多个对象之间的复杂交互:中介者模式

解释器模式:从语法规则到实际实现的完美转换

示例源码

gitcode.net/fox9916/des…

重点回顾

单例模式

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

image.png

简单工厂模式

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

image.png

工厂方法模式

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

image.png

抽象工厂模式

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

image.png

建造者模式

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

image.png

原型模式

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

image.png

适配器模式

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

image.png

image.png

装饰器模式

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

image.png

代理模式

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

image.png

门面模式

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

image.png

桥梁模式

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

image.png

组合模式

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

image.png

享元模式

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

image.png

策略模式

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

image.png

模板方法模式

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

image.png

观察者模式

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

image.png

迭代器模式

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

image.png

命令模式

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

image.png

责任链模式

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

image.png

备忘录模式

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

image.png

状态模式

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

image.png

访问者模式

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

image.png

中介者模式

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

image.png

解释器模式

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

image.png

学习方法

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

理论学习:首先,可以通过阅读相关的书籍和技术博客,了解设计模式的基本概念、分类、应用场景等理论知识。强烈向小伙伴推荐我的技术博客中的《设计模式专栏》,它详细介绍了梳理种常见的设计模式的概念及其原理、应用和实现方法。

掌握基础语言知识:设计模式的学习需要具备一定的编程基础,如果是Java程序员,面向对象编程(OOP)的基础知识,如类、对象、继承、多态等是必须要掌握的,因此我的《设计模式专栏》的第一篇就是和大家分享如何通过UML类图来看清楚,类与类之间的关系。

实践项目:理论学习是基础,但只有通过实践才能真正掌握设计模式。可以选择一些小型的项目或者案例,尝试使用设计模式来解决实际问题。例如,可以使用工厂模式来管理对象的创建,用观察者模式实现事件驱动的系统等。通过实践,可以加深对设计模式的理解和掌握,需要特别注意的是在实际业务场景应用中,有可能不会完全符合某个设计模式的定义,也有可能在某个业务场景中,需要某两种及以上设计模式结合起来使用。

参与社区和论坛:参与社区和论坛的讨论,了解其他开发者是如何应用设计模式的,同时也可以分享自己的经验和问题。

反思和总结:在学习过程中,要不断反思和总结,思考每种设计模式的应用场景、优缺点以及与其他模式的区别和联系。同时,也要反思自己在使用设计模式的过程中出现的错误和不足,并加以改进。

持续学习和更新知识:设计模式的发展是随着软件工程的发展而不断演进的,因此需要持续学习和更新知识。关注最新的技术趋势和最佳实践,了解新的设计模式和解决方案,以保持自己的竞争力。

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

实战应用

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

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

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