🍬本文摘要

2023-6-9-一天一种设计模式-LMLPHP

用一个月的时间来系统的学习一下23种设计模式,之前学了一半已有,但是没有文章总结下来,现在重新复习一下并总结成文章,这一篇是一个开篇,来大话一下设计模式,我之前学设计模式也是看的《大话设计模式》这本书,非常好。




😉一、如何理解设计模式

设计模式是一种被广泛应用于软件开发的编程思想,它提供了一套通用的解决方案来解决各种常见的设计问题。在软件开发中,为了提高代码的可重用性、灵活性和可维护性,我们经常会遇到各种设计问题。这些问题可能涉及到对象之间如何协作、如何处理变化、如何管理状态等方面。

设计模式通过抽象出这些常见的问题,并提供了一套通用的解决方案,帮助我们更好地组织代码、降低耦合度、提高代码可读性和易扩展性。使用设计模式可以减少代码重复、提高代码可维护性、降低系统的复杂度以及使代码更加清晰易懂。

同时,设计模式也可以提高团队间的沟通效率,因为设计模式是一种公认的方式,可以让不同的开发者之间更容易地交流和理解。在软件行业中,设计模式已成为一种非常重要的编程思想,不仅有助于提高软件质量,也可以提高开发效率,缩短项目周期。


🐱‍🐉二、设计模式的分类

常见的设计模式一共有23种,根据目的和范围不同可以分为三类:

  1. 创建型模式(5种):用于创建对象的模式,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。

  2. 结构型模式(7种):用于处理类或对象之间的组合关系,包括适配器模式、桥接模式、装饰器模式、外观模式、享元模式、代理模式和组合模式。

  3. 行为型模式(11种):用于描述对象之间的通信方式和协作方式,包括模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式和解释器模式。

除了这些常见的设计模式之外,还有一些其他的模式,如并发模式、架构模式等。


🎉三、创建型模式的目的

创建型模式是一类软件设计模式,其主要目的是处理对象的创建过程,旨在提供一种有效的方式来创建对象,以及管理对象的创建和生命周期。创建型模式通常应用于需要灵活地管理对象的场景,从而可以减少代码重复、提高代码可维护性、降低系统复杂度等方面提供帮助。

具体而言,创建型模式的目的包括以下几个方面:

  1. 将对象的创建和使用分离:通过将对象的创建和使用分离,可以降低类之间的耦合度,从而提高系统的灵活性和可维护性。

  2. 隐藏对象创建的复杂性:有些对象的创建过程可能非常复杂,或者涉及到很多不同的类和组件。使用创建型模式可以隐藏这些实现细节,让客户端程序更加简单明了。

  3. 提供一种可扩展的创建机制:在软件开发过程中,对象的创建方式可能会随着需求的变化而频繁改变。使用创建型模式可以提供一种可扩展的创建机制,以便在不修改原有代码的情况下轻松地添加新的对象类型。

  4. 支持对象的复用:有些对象可能被多个客户端程序所共享,如果每次都重新创建对象会浪费系统资源。使用创建型模式可以支持对象的复用,从而提高系统的性能和效率。


🐱‍🚀四、结构型模式的目的

结构型模式是一类软件设计模式,其主要目的是处理类和对象之间的组合关系,旨在提供一种有效的方式来实现类和对象的组合,以及管理它们之间的关系。结构型模式通常应用于需要灵活地实现对象之间的组合关系场景,从而可以减少代码重复、提高代码可维护性、降低系统复杂度等方面提供帮助。

具体而言,结构型模式的目的包括以下几个方面:

  1. 将对象和类组合成较大的结构:通过将对象和类组合成较大的结构,可以提高系统的灵活性和可维护性,并且使程序更加易读易懂。

  2. 隐藏系统中各个部分的实现细节:有些系统由很多不同的对象和类组成,这些对象和类的实现细节可能非常复杂,使用结构型模式可以隐藏这些实现细节,让客户端程序更加简单明了。

  3. 便于对系统进行扩展:在软件开发过程中,系统的需求可能会频繁变化,使用结构型模式可以提供一种可扩展的框架,使得系统更容易进行扩展和升级。

  4. 实现对象的复用:有些对象可能被多个客户端程序所共享,如果每次都重新创建对象会浪费系统资源。使用结构型模式可以支持对象的复用,从而提高系统的性能和效率。


🎂五、行为型模式的目的

行为型模式是一类软件设计模式,其主要目的是处理对象之间的通信方式和协作方式,旨在提供一种有效的方式来实现对象之间的通信和协作,以及管理它们之间的关系。行为型模式通常应用于需要灵活地实现对象之间的通信和协作场景,从而可以减少代码重复、提高代码可维护性、降低系统复杂度等方面提供帮助。

具体而言,行为型模式的目的包括以下几个方面:

  1. 将算法和对象的职责分离开来:有些算法可能需要被多个对象所共享,使用行为型模式可以将算法从对象中分离出来,从而提高代码的可重用性和灵活性。

  2. 管理对象之间的协作方式:在软件系统中,对象之间的协作非常重要,使用行为型模式可以提供一种规范的方式来管理对象之间的协作方式,使得程序更加易读易懂。

  3. 支持程序的动态扩展:在软件开发过程中,系统的需求可能会频繁变化,使用行为型模式可以提供一种可扩展的框架,使得系统更容易进行扩展和升级。

  4. 提供一种灵活的控制机制:行为型模式提供了一种灵活的控制机制,可以让程序动态地改变对象之间的交互方式,从而让系统更加具有弹性和可扩展性。


🥩六、设计模式的用于不用

设计模式并非万能的解决方案,应该根据实际情况来考虑是否使用它们。以下是一些关于何时使用和不使用设计模式的建议:

什么时候使用设计模式?

  1. 当面临一个已知的问题,并且已经有了经过验证的解决方案,可以考虑使用相应的设计模式。

  2. 当需要处理复杂的问题时,设计模式可以帮助提供一种可重用、灵活和可扩展的解决方案。

  3. 当需要与其他程序员共同开发一项任务,并且需要一种公认的方式来组织代码时,设计模式可以提供一种标准化的解决方案。

  4. 当需要创建大规模的应用程序时,设计模式可以帮助简化代码并提高代码质量。

什么时候不使用设计模式?

  1. 当问题太简单,使用设计模式反而会增加复杂性和难度。

  2. 当团队中没有人熟悉或理解特定的设计模式,使用它们可能会导致出现错误或产生额外的成本。

  3. 当代码需要与其他系统集成时,使用设计模式可能会对性能产生负面影响。

  4. 当需要快速原型开发时,使用设计模式可能会增加开发周期。

使用设计模式需要基于具体情况进行考虑,需要评估其是否有助于解决问题并提高代码质量,同时也需要注意不要滥用设计模式,应该选择适当的模式来解决实际问题。


🍚七、如何选择使用哪种设计模式

选择使用哪种设计模式需要考虑多个因素,包括问题的性质、系统的要求和开发人员的经验等。以下是一些选择设计模式的建议:

  1. 了解不同类型的设计模式:首先,需要了解各种不同类型的设计模式,例如创建型模式、结构型模式和行为型模式。熟悉各个模式的定义、工作原理和应用场景等方面的知识,可以帮助你更好地进行选择。

  2. 确定问题的性质:在选择设计模式时,需要考虑所面临的问题的性质。例如,如果需要创建对象并确保只有一个实例,则可以考虑使用单例模式。如果需要创建对象的过程很复杂,则可以考虑使用工厂模式。

  3. 确定系统的要求:在选择设计模式时,还需要考虑系统的要求。例如,如果系统需要支持插件化架构,则可以考虑使用桥接模式或装饰器模式。如果系统需要支持动态更新,则可以考虑使用观察者模式

  4. 考虑开发人员的经验:在选择设计模式时,需要考虑开发团队的经验水平。如果团队中有较多经验丰富的开发人员,则可以考虑使用更高级别的设计模式。如果团队中的开发人员经验较少,则可以使用更简单的设计模式。

  5. 尽可能地遵循设计原则:在选择设计模式时,需要尽可能地遵循面向对象设计的原则。例如,尽可能地让类和对象之间的耦合度降低,尽可能地保持代码的易扩展性、可重用性和可维护性等。


🥠八、其他设计模式

除了23种常见的设计模式,还有其他一些设计模式:

  1. 服务定位器模式(Service Locator Pattern):通过中央注册表来管理服务的提供和访问。

  2. 数据访问对象模式(Data Access Object Pattern):将数据源抽象出来,并提供一组标准的接口来访问这些数据。

  3. 远程代理模式(Remote Proxy Pattern):在客户端和远程资源之间引入一个代理对象,以便于客户端对远程资源的访问。

  4. 空对象模式(Null Object Pattern):使用一个默认的“空对象”来替代“null”,以避免出现空指针异常等问题。

  5. 责任链模式(Chain of Responsibility Pattern):将请求沿着一个链传递,直到某个对象能够处理它。

  6. 访问者模式(Visitor Pattern):将算法与对象结构分离开来,使得算法可以独立变化。

  7. 解释器模式(Interpreter Pattern):定义一种语言,并实现该语言的解释器。

  8. 模板方法模式(Template Method Pattern):定义一个算法框架,将一些步骤延迟到子类实现。

  9. 并发模式(Concurrency Patterns):用于处理多线程和并发编程相关的问题的设计模式。


🍤九、程序员的使命是什么

程序员的使命是为人类创造价值,通过编写高质量的代码和开发先进的技术来改善人类的生活和工作环境,为社会做出积极的贡献。


🍳参考文献

🧊文章总结

提示:这里对文章进行总结:

  本文讲了关于设计模式的一些知识,希望大家学习完有所收获。






更多好文推荐

🍸2021-4月Python 机器学习——中文新闻文本标题分类
🍹2021年4月-(计算机网络)小型校园网络模拟搭建,最全最准确版
🍺2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE
🍻2022-11-28-大数据可视化,特征维度大于50
🥂2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻

06-09 13:45