【设计模式】设计模式的分类与组织

文章目录

  • 前言
  • 一、设计模式的分类
    • 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)一起使用。此外,某些模式虽然意图不同,但设计结果相似,如组合模式和装饰器模式在结构图上有相似之处。

结论

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/985015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3实战学习(Element-Plus常用组件的使用(输入框、下拉框、单选框多选框、el-image图片))(上)(5)

目录 一、Vue3工程环境配置、项目基础脚手架搭建、Vue3基础语法、Vue3集成Element-Plus的详细教程。(博客链接如下) 二、Element-Plus常用组件使用。 &#xff08;1&#xff09;el-input。(input输入框) <1>正常状态的el-input。 <2>el-input的disable状态。 <3…

AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘

AttributeError: module backend_interagg has no attribute FigureCanvas 这个错误通常是由于 Matplotlib 的后端配置问题引起的。具体来说&#xff0c;Matplotlib 在尝试加载某个后端时&#xff0c;发现该后端模块中缺少必要的属性&#xff08;如 FigureCanvas&#xff09;&a…

网络安全基础与应用习题 网络安全基础答案

1.列出并简要给出SSH的定义。 正确答案&#xff1a; 答&#xff1a;6.10传输层协议&#xff1a;提供服务器身份验证、数据保密性和数据完整性&#xff0c;并具有前向保密性&#xff08;即&#xff0c;如果在一个会话期间密钥被破坏&#xff0c;则知识不会影响早期会话的安全性&…

文件上传复现

1、什么是文件上传漏洞&#xff1f; 答&#xff1a;文件上传漏洞是指攻击者通过上传恶意文件到服务器、从而执行任意代码、获取系统权限或者破坏系统安全的漏洞、常见于允许用户上传文件的Web应用程序中。 2. 文件上传漏洞形成原因 未验证文件类型&#xff1a;未对上传文件的…

【网络安全工程】任务12:网络安全设备

目录 一、防火墙​ 1、作用​ 2、配置方式​ 3、存在的漏洞​ 二、入侵检测系统&#xff08;IDS&#xff09;和入侵防御系统&#xff08;IPS&#xff09;​ 1、作用​ 2、配置方式​ 3、存在的漏洞​ 三、防病毒网关​ ​1、作用​ 2、配置方式​ 3、存在的漏洞​ …

Docker容器与宿主机目录映射深度解析

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、Docker容器与宿主机目录映射基础原理 在深入了解如何查询 Docker 容器目录在宿主机的映射目录之前&#xff0c;有必要先明晰其背后的基础原理。Docker 容器通过挂载&#xff08;mount&#xff09;机制将宿主机的…

DeepSeek+Maxkb+Ollama+Docker搭建一个AI问答系统

DeepSeekMaxkbOllamaDocker搭建一个AI问答系统 文章目录 DeepSeekMaxkbOllamaDocker搭建一个AI问答系统前言一、创建同一内网的网络二、拉取两个镜像三、启动Ollama以及调试Maxkb4.Maxkb创建一个应用并建立知识库5、应用效果总结 前言 我觉得只要是使用Docker技术&#xff0c;…

决策树,Laplace 剪枝与感知机

1.决策树 决策树是一种用于分类任务的监督学习算法。它基于特征的划分来做出决策&#xff0c;每个节点表示一个特征&#xff0c;每条分支代表该特征的可能取值&#xff0c;每个叶子节点代表分类结果。 用通俗的话来说&#xff0c;决策树就像一个**"如果……那么……&quo…

使用DeepSeek+蓝耘快速设计网页简易版《我的世界》小游戏

前言&#xff1a;如今&#xff0c;借助先进的人工智能模型与便捷的云平台&#xff0c;即便是新手开发者&#xff0c;也能开启创意游戏的设计之旅。DeepSeek 作为前沿的人工智能模型&#xff0c;具备强大的功能与潜力&#xff0c;而蓝耘智算云平台则为其提供了稳定高效的运行环境…

标准卷积(Standard Convolution)

标准卷积的基础操作图解&#xff1a; 卷积之后尺寸公式&#xff1a; 输入尺寸&#xff1a;WH卷积核尺寸&#xff1a;Fw​Fh​填充大小&#xff1a;P步长&#xff1a;S 输出尺寸 WoutHout可以通过以下公式计算&#xff1a; 其中[x]表示向下取整。 实例&#xff1a; 输入图像…

使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack

作者&#xff1a;来自 Elastic TiagoQueiroz 我们在 Elastic 一直努力将更多 Linux 发行版添加到我们的支持矩阵中&#xff0c;现在 Elastic-Agent 和 Beats 已正式支持 Debian 12&#xff01; 本文演示了我们正在开发的功能&#xff0c;以支持使用 Journald 存储系统和身份验…

ArcGIS Pro中字段的新建方法与应用

一、引言 在地理信息系统&#xff08;GIS&#xff09;的数据管理和分析过程中&#xff0c;字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计&#xff0c;字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件&#xff0c;为用户提…

企业如何选择网站模版快速建站?

企业想拥有一个专业和功能齐全的官网事关重要。然而&#xff0c;对于新手用户&#xff0c;从基础开始创建网站可能是一件较为复杂和麻烦的过程。今天的文章从零开始给介绍一下如何搭建网站。 一、先确定建站的主题 用户在开始建站前明确自己建站的目的、是为了宣传网站、还是销…

Phi-4-multimodal:图、文、音频统一的多模态大模型架构、训练方法、数据细节

Phi-4-Multimodal 是一种参数高效的多模态模型&#xff0c;通过 LoRA 适配器和模式特定路由器实现文本、视觉和语音/音频的无缝集成。训练过程包括多阶段优化&#xff0c;确保在不同模式和任务上的性能&#xff0c;数据来源多样&#xff0c;覆盖高质量网络和合成数据。它的设计…

北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

爬取动态数据,爬取持久化数据

1. 动态内容与静态内容的区别 动态内容通常指通过 JavaScript 渲染或异步加载的数据。静态内容则是页面加载时直接可见的内容&#xff0c;通常通过 HTML 直接获取。很多现代网站都使用 JavaScript 动态渲染页面内容&#xff08;例如 AJAX 请求&#xff09;。 头条网站的热榜内…

rdiff-backup备份

目录 1. 服务器备份知识点 1.1 备份策略 1.2 备份步骤和宝塔面板简介 1.3 CentOS7重要目录 2. 备份工具 2.1 tar -g 备份演示 2. rsync 备份演示 3. rdiff-backup 备份演示 4. 差异和优缺点 3. rdiff-backup安装和使用 3.1 备份命令rdiff-backup 3.2 恢复命令--…

【6】字典树学习笔记

前言 WFLS 2023 寒假集训 Day2 大纲里字典树在数据结构里&#xff0c;但是个人认为应该属于字符串&#xff0c;就把它放到字符串里了 字典树 字典树&#xff0c;又称Trie树&#xff0c;字母树。每个顶点代表一个字符&#xff0c;从根节点到叶子节点的路径上所有的节点的字符…

Aim Robotics电动胶枪:机器人涂胶点胶的高效解决方案

在自动化和智能制造领域&#xff0c;机器人技术的应用越来越广泛&#xff0c;而涂胶和点胶作为生产过程中的重要环节&#xff0c;也逐渐实现了自动化和智能化。Aim Robotics作为一家专注于机器人技术的公司&#xff0c;其推出的电动胶枪为这一领域带来了高效、灵活且易于操作的…

Camel AI Owl + 阿里云QWQ 本地部署

在 Windows 环境下&#xff0c;部署 Camel AI Owl 并集成阿里云百炼 DeepSeek-R1 API。通过循序渐进的详细说明&#xff0c;你将轻松完成从环境配置到系统落地的全过程。 目录 环境准备Windows 下创建虚拟环境并安装依赖部署 Camel AI Owl配置阿里云百炼 DeepSeek-R1 API测试与…