当前位置: 首页 > news >正文

【设计模式】《设计模式:可复用面向对象软件的基础》设计模式的分类与组织

文章目录

  • 前言
  • 一、设计模式的分类
    • 1. 目的准则
    • 2. 范围准则
  • 二、设计模式的细分
    • 1.创建型模式的细分
    • 2.结构型模式的细分
    • 3.行为型模式的细分
  • 三、设计模式的关联
  • 结论


前言

在软件开发中,设计模式是一种解决特定问题的最佳实践。由于设计模式种类繁多,理解它们的分类和组织方式对于开发者来说至关重要。本文将简要介绍设计模式的分类、目的和范围,并探讨如何更好地理解和应用这些模式。

一、设计模式的分类

设计模式在粒度和抽象层次上各不相同。由于存在众多的设计模式,我们希望用一种方式将它们组织起来。这一节将对设计模式进行分类以便我们对各族相关的模式进行引用。分类有助于更快地学习目录中的模式,且对发现新的模式也有指导作用,如表1-1所示。

设计模式可以根据两个主要准则进行分类:目的范围

在这里插入图片描述

1. 目的准则

第一条是目的准则,即模式是用来完成什么工作的。

模式依据其目的可分为创建型(creational)、结构型(structural)和行为型(behavioral)三种。

  • 创建型模式 (Creational Patterns):创建型模式与对象的创建有关;

  • 结构型模式 (Structural Patterns):结构型模式处理类或对象的组合;

  • 行为型模式 (Behavioral Patterns):行为型模式对类或对象怎样交互和怎样分配职责进行描述。

2. 范围准则

第二条是范围准则,指定模式主要是用于类还是用于对象。

  • 类模式 (Class Patterns):类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时便确定下来了。

  • 对象模式 (Object Patterns):对象模式处理对象间的关系,这些关系在运行时是可以变化的,更具动态性。

从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。

二、设计模式的细分

范围准/目的创建型结构型行为型
创建型类模式将对象的部分创建工作延迟到子类结构型类模式使用继承机制来组合类行为型类模式使用继承描述算法和控制流
对象创建型对象模式则将对象的创建延迟到另一个对象中结构型对象模式则描述了对象的组装方式行为型对象模式则描述了一组对象怎样协作完成单个对象所无法完成的任务

1.创建型模式的细分

创建型模式又可以分为类模式和对象模式:

  • 创建型类模式:将对象的创建延迟到子类中。例如,工厂方法模式(Factory Method)允许子类决定实例化哪一个类。

  • 创建型对象模式:将对象的创建延迟到另一个对象中。原型模式(Prototype)允许通过复制现有对象来创建新对象。

2.结构型模式的细分

结构型模式也可以分为类模式和对象模式:

  • 结构型类模式:使用继承机制来组合类。比如,桥接模式(Bridge)通过将抽象和实现分离来实现灵活的组合。

  • 结构型对象模式:描述对象的组装方式,例如,组合模式(Composite)允许将对象组合成树形结构以表示部分-整体层次。

3.行为型模式的细分

同样,行为型模式可以分为类模式和对象模式:

  • 行为型类模式:使用继承描述算法和控制流。模板方法模式(Template Method)定义了一个算法的骨架,而将一些步骤延迟到子类中实现。

  • 行为型对象模式:描述一组对象如何协作以完成单个对象无法完成的任务。责任链模式(Chain of Responsibility)允许将请求沿着处理者链传递,直到找到合适的处理者。

三、设计模式的关联

设计模式之间常常存在关联关系。例如,组合模式(Composite)常和迭代器模式(Iterator)或访问者模式(Visitor)一起使用。此外,某些模式虽然意图不同,但设计结果相似,如组合模式和装饰器模式在结构图上有相似之处。

结论

理解设计模式的分类和组织方式,有助于开发者在实际工作中更高效地应用这些模式。通过多角度思考模式的功能、差异和应用场合,我们可以更深入地掌握软件设计的精髓。希望本文能帮助你更好地理解设计模式,并在日常开发中灵活运用。


http://www.mrgr.cn/news/94016.html

相关文章:

  • 类和对象(下)
  • 大语言模型-语言模型发展历程
  • ⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)
  • 基于Ollama平台部署的Qwen大模型实现聊天机器人
  • ⭐算法OJ⭐经典题目分类索引(持续更新)
  • NVSHMEM介绍、InfiniBand GPUDirect、和NVshmem使用案例说明
  • Application.OnTime如何引用带参数的过程
  • 记录--有惊无险
  • 数据结构全解析:从线性到非线性,优缺点与应用场景深度剖析
  • 大模型在甲状腺良性肿瘤诊疗全流程中的应用研究报告
  • Nginx 监控方法(‌Nginx Monitoring Methods)
  • LearnOpenGL-笔记-其二
  • 【从零开始学习计算机科学】操作系统(八)IO管理
  • 大模型在甲状腺癌诊疗全流程预测及方案制定中的应用研究
  • Excel 中如何实现数据透视表?
  • 【Pandas】pandas Series asfreq
  • 如何通过强化学习RL激励大型语言模型(LLMs)的搜索能力?R1-Searcher来了
  • 指令微调 (Instruction Tuning) 与 Prompt 工程
  • ubuntu 22.04 本地部署DeepSeek的Janus Pro
  • Go语言Viper配置详解:conf库优雅解析实战