设计模式之GoF23介绍

2023-12-13 04:04:50

在这里插入图片描述

??在软件开发领域,设计模式是一种用于解决特定问题的经验性的、可重用的设计思想。设计模式不仅是面向对象编程(OOP)的基石,更是构建可维护、可扩展软件架构的重要工具。本文将深入探讨设计模式,包括其概念、历史、分类、七大设计原则以及设计模式关系。

一、设计模式的背景

1.1 什么是设计模式

??设计模式(Design pattern)是对软件设计中普遍存在的问题的通用解决方案。它们提供了一种在特定上下文中解决问题的方法,是经过验证的、可复用的设计思想。设计模式不是代码或库,而是一种更高层次的抽象,它帮助开发者更好地组织和理解代码。

??通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。

1.2 设计模式的历史

??设计模式的概念最早由计算机科学家Christopher Alexander引入,他在建筑领域中提出了“模式语言”的概念。后来,Erich GammaRichard HelmRalph JohnsonJohn Vlissides等四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中将设计模式引入到软件开发领域。这本书通常被称为GoFGang of Four,四人组)书籍,成为设计模式领域的经典之作

二、设计模式的分类

在这里插入图片描述

2.1 创建型模式

??对象实例化的模式,创建型模式用于解耦对象的实例化过程。

  1. 单例模式:某个类智能有一个实例,提供一个全局的访问点。
  2. 工厂方法模式:一个工厂类根据传入的参量决定创建出哪一种产品类的实例。
  3. 抽象工厂模式:创建相关或依赖对象的家族,而无需明确指定具体类。
  4. 建造者模式:封装一个复杂对象的创建过程,并可以按步骤构造。
  5. 原型模式:通过复制现有的实例来创建新的实例。

2.2 结构型模式

??把类或对象结合在一起形成一个更大的结构。

  1. 装饰器模式:动态的给对象添加新的功能。
  2. 代理模式:为其它对象提供一个代理以便控制这个对象的访问。
  3. 桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。
  4. 适配器模式:将一个类的方法接口转换成客户希望的另一个接口。
  5. 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。
  6. 外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
  7. 享元模式:通过共享技术来有效的支持大量细粒度的对象。

2.3 行为型模式

??类和对象如何交互,及划分责任和算法。

  1. 策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。
  2. 模板方法模式:定义一个算法结构,而将一些步骤延迟到子类实现。
  3. 命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。
  4. 迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
  5. 观察者模式:对象间的一对多的依赖关系。
  6. 仲裁者模式:用一个中介对象来封装一系列的对象交互。
  7. 备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
  8. 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  9. 建造者模式:允许一个对象在其对象内部状态改变时改变它的行为。
  10. 责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
  11. 访问者模式:不改变数据结构的前提下,增加作用于一组对象元素的新功能。

三、七大设计原则


在这里插入图片描述

??设计模式的核心是一系列通用的原则,这些原则有助于制定良好的软件设计方案。以下是七大设计原则:

  1. 单一职责原则 (Single Responsibility Principle, SRP)

    • 一个类应该只有一个引起变化的原因。换句话说,一个类只负责一个功能领域。
  2. 开放/封闭原则 (Open/Closed Principle, OCP)

    • 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即,我们可以通过添加新的代码来扩展功能,而不必修改已有的代码。
  3. 里氏替换原则 (Liskov Substitution Principle, LSP)

    • 子类必须能够替换其基类而不影响程序的正确性。换句话说,如果一个软件实体使用了一个基类,那么替换成其子类也不应该导致程序出错。
  4. 依赖倒置原则 (Dependency Inversion Principle, DIP)

    • 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
  5. 接口隔离原则 (Interface Segregation Principle, ISP)

    • 不应该强迫一个类实现它不需要的接口。一个类对其他类的依赖应该建立在最小的接口上。
  6. 合成/聚合复用原则 (Composite/Aggregate Reuse Principle, CARP)

    • 首选使用合成/聚合而不是继承来达到复用的目的。即,通过将现有的类组合在一起创建新的功能,而不是通过继承。
  7. 迪米特法则 (Law of Demeter, LoD)

    • 一个对象应该对其他对象有最少的了解。一个类不应该直接调用其它对象的内部方法,而应该通过一个中间对象进行调用。

四、设计模式关系


在这里插入图片描述

结论 🚀 🚀 🚀

??设计模式是软件开发中的有力工具,通过提供经验丰富的解决方案,帮助开发者构建可维护、可扩展的软件系统。然而,应该在实践中谨慎使用,根据具体情况灵活运用,以避免过度工程和不必要的复杂性。设计模式不仅仅是一种技术,更是一种艺术,需要在实践中不断体悟!

文章来源:https://blog.csdn.net/qq_45609369/article/details/134827130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。