软件设计模式

YuriyShea 2022年04月04日 334次浏览

何为软件设计模式?

我们平时做研发的过程当中,会经常提到设计模式,那么什么是设计模式呢?在阐明设计模式的概念之前,我们先来了解“模式”这个更基本的概念。

所谓模式,即主体行为的一般方式,是理论和实践之间的中间环节。模式具有一般性、简单性、重复性、结构性、稳定性、可操作性等特征。模式在实际运用中必须具体情况具体分析,以实现一般性和特殊性的衔接,模式必须要根据实际情况的变化随时调整要素与结构才有可操作性。

因此,软件设计模式可以理解为基于理论指导如何设计软件的一般方法。这种一般方法来自于前人们在研发软件过程中积淀下来的经验总结,包含了对软件架构、软件稳定性、软件可维护性、软件可扩展性等方面的思考,为我们进行最佳实践提供了一整套可套用的框架。

软件设计模式的概念最早在Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(Gang of Four,GOF四人帮)1994年合著出版的《Design Patterns - Elements of Reusable Object-Oriented Software》(译名:《设计模式 - 可复用的面向对象软件元素》) 一书中被提出,他们提出的设计模式主要是基于面向对象的设计原则。

软件设计模式有何用?

首先,对于软件来说,软件设计模式是一套完整的思想体系,通过软件设计模式指导我们进行软件研发实践,可以帮助我们设计出更优良的软件架构,能够让我们的代码更加整洁,复用程度更高,可用性、稳定性、扩展性更强,避免我们陷入软件难以持续维护窘境。

其次,对于他人来说,通过软件模式设计编写出来的代码,可阅读性和可维护性都会更高,便于他人理解我们的代码,不会对他人造成代码维护的困扰。

再次,对于我们个人来说,学些软件设计模式,有助于我们快速提升自己的编码设计能力,更加轻松地应对各种复杂的问题场景,而且我们能从中学些到很多优秀的编程思想,有助于我们不断完善和提升自己的专业水平。

都有哪些软件设计模式?

现在我们常用的软件设计模式绝大部分来源于GOF的《Design Patterns - Elements of Reusable Object-Oriented Software》一书,书中介绍了23中常用设计模式,这些设计模式根据用途可划分为创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)三大类,如下:

1.创建型模式

用于更加灵活地创建对象,具体包含如下模式:

  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)

2.结构型模式

关注接口、类的组合,具体包含如下模式:

  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 过滤器模式(Filter、Criteria Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)

3.行为型模式

关注对象之间的通信,具体包含如下模式:

  • 责任链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 空对象模式(Null Object Pattern)
  • 策略模式(Strategy Pattern)
  • 模板模式(Template Pattern)
  • 访问者模式(Visitor Pattern)

设计模式之间的关系

借用网上的图片来描述一下设计模式之前的关系,如下:
image.png
图片来自于:https://www.runoob.com/wp-content/uploads/2014/08/the-relationship-between-design-patterns.jpg

参考资料

  1. https://baike.baidu.com/item/%E6%A8%A1%E5%BC%8F/700029?fr=aladdin
  2. https://www.runoob.com/design-pattern/design-pattern-intro.html