实用指南:设计模式概述

news/2025/9/20 15:28:01/文章来源:https://www.cnblogs.com/yfceshi/p/19102486

设计模式

  • 1 概念
  • 2 分类
    • 2.1 创建型模式
    • 2.2 结构型模式
    • 2.3 行为型模式

1 概念

设计模式是解决软件设计中常见问题的可复用方案,提供了一套经过验证的代码结构和交互方式。它们不直接转化为代码,而是描述如何组织类和对象以应对特定场景。

2 分类

设计模式通常分为三大类:创建型模式结构型模式行为型模式

创建型结构型行为型
工厂方法模式适配器模式策略模式
抽象工厂模式装饰器模式观察者模式
单例模式代理模式命令模式
建造者模式外观模式模版方法模式
原型模式桥接模式状态模式
组合模式责任链模式
享元模式中介者模式
迭代器模式
访问者模式
备忘录模式
解释器模式

2.1 创建型模式

这类模式关注对象的创建机制,旨在以更灵活的方式创建对象,避免直接使用new关键字。

  • 工厂方法模式Factory Method

    • 给予了一种延迟创建类的方法, 定义一个创建对象的接口,但由子类决定实例化哪个类。
    • 适用于需要生成复杂对象或对象创建过程要求封装的情况。
  • 抽象工厂模式Abstract Factory

    • 提供一个接口用于创建相关或依赖对象的家族,而无需指定具体类。
    • 适用于必须一组协同工作的对象,解决复杂环境中对象创建的问题。
  • 单例模式Singleton

    • 确保一个类只有一个实例,并提供全局访问点。
    • 适用于需要控制资源访问或共享状态的场景。
  • 建造者模式Builder

    • 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
    • 适用于对象构造过程复杂或需要分步构建的场景。
  • 原型模式Prototype

    • 通过复制现有对象来创建新对象,而不是通过new
    • 适用于对象创建成本较高或得动态设置对象的场景。

2.2 结构型模式

这类模式关注类和对象的组合方式,旨在通过继承或组合实现更灵活的结构。

2.3 行为型模式

这类模式关注对象之间的交互和职责分配,旨在实现更灵活的通信方式。

  • 策略模式Strategy

    • 定义一系列算法,封装每个算法并使它们可以互相替换。
    • 适用于应该在运行时动态选择算法的场景。
  • 观察者模式Observer

    • 定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。
    • 适用于事件驱动的架构。
  • 命令模式Command

    • 将请求封装为对象,从而支持请求的排队、记录或撤销。
    • 适用于需要解耦发送者和接收者的场景。
  • 模板方式模式Template Method

    • 定义一个管理中的算法骨架,将某些步骤延迟到子类中实现。
    • 适用于需要固定流程但允许部分步骤灵活变化的场景。
  • 状态模式State

    • 允许对象在其内部状态改变时改变它的行为。
    • 适用于对象行为依赖于状态的场景。
  • 责任链模式Chain of Responsibility

    • 将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
    • 适用于需要动态指定处理对象的场景。
  • 中介者模式Mediator

    • 定义一个中介对象来封装一系列对象之间的交互。
    • 适用于需要减少对象间直接耦合的场景。
  • 迭代器模式(**lterator **)

    • 提供一种方法顺序访问聚合对象中的各个元素,而不暴露其内部表示。
    • 适用于必须统一遍历不同结构的场景。
  • 访问者模式Visitor

    • 将算法与对象结构分离,使得可以在不修改对象结构的情况下添加新的操控。
    • 适用于需要频繁添加新操控的场景。
  • 备忘录模式Memento

    • 在不破坏封装性的前提下捕获并保存对象的内部状态,以便后续恢复。
    • 适用于需要撤销或回滚的场景。
  • 解释器模式Interpreter

    • 定义语言的文法表示,并提供一个解释器来处理这种语言。
    • 适用于需要解析特定语法规则的场景。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seedream 4.0 简直绝了!

2025年,我们正站在AI内容创作的历史拐点。在这个AI图像工具满天飞的时代,我们经历了太多看起来很美的失望:Nano Banana生成的商品图总是细节失真,中文文字渲染混乱。 我体验了很多AI生图工具,我从未见过如此颠覆性…

财务管理NPV与IRR投资分析在IT行业案例

财务管理NPV与IRR投资分析在IT行业案例财务管理NPV与IRR投资分析在IT行业案例背景 真实IT服务器投资场景XT公司准备投资购买服务器硬件,用于AI部署DeepSeek R1 72b模型,我们使用NPV方法进行投资分析 联想(Len…

优化sigmoid

原代码 def sigmoid(x):result = 1 / (1 + np.exp(-x))return result问题:当-x值过大,会导致溢出错误 改进后代码 def improved_sigmoid(x):# 创建一个与输入x相同大小的空数组来存储结果result = np.zeros_like(x)#…

mysql查询死锁,mysql查询死锁方法

在 MySQL 中查询死锁可以通过以下方法实现: 查看最近一次死锁信息MySQL 会记录最近一次死锁的详细信息,可以通过以下命令查看: sql SHOW ENGINE INNODB STATUS; 在输出结果中,找到 "LATEST DETECTED DEADLOCK…

【IEEE出版、已连续5届稳定快速EI检索】第六届计算机工程与智能控制学术会议(ICCEIC 2025)

【IEEE出版 |已连续5届EI稳定检索】 第六届计算机工程与智能控制学术会议(ICCEIC 2025) 2025 6th International Conference on Computer Engineering and Intelligent Control 在这里看会议官网详情 会议时间:2025年…

软工第二次作业之个人项目——论文查重

论文查重系统 - 项目报告项目信息 详情课程 软件工程作业要求 个人编程作业项目目标 实现一个论文查重程序,规范软件开发流程,熟悉Github进行源代码管理和学习软件测试GitHub仓库 https://github.com/ymxc152/312300…

对实体类Id自增

我们首先需要明白 lambda 表达式 (item=>item.Id)↓ Expression 树 → 检查是属性访问↓ Expression.Assign → 拼出 “item.Id = index”↓ Compile() → 生成机器码委托 Action<T,int>↓ 放进 Concurr…

HarmonyOS之UIContext 与 UIAbility、WindowStage 的关系 - 指南

HarmonyOS之UIContext 与 UIAbility、WindowStage 的关系 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

向上一步——当做事纠结的人停止决策内耗,你就是掌控自己的神!

向上一步——当做事纠结的人停止决策内耗,你就是掌控自己的神!重要选择的核心思维:批判性思维的完整实践指南 面对人生关键选择时,外界繁杂观点常让人陷入内耗,而批判性思维的核心是 “不盲从他人经验,只锚定自我…

Windows平台安装cocos2d-x V3.17.2

https://juejin.cn/post/7201091178489462842

完整教程:Mistral Document AI已正式登陆Azure AI Foundry(国际版)

完整教程:Mistral Document AI已正式登陆Azure AI Foundry(国际版)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

深入解析:InnoDB存储引擎-锁

深入解析:InnoDB存储引擎-锁2025-09-20 15:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

飞书机器人推送消息通知用自定义机器人

gofly.v1kf.com vx: llike620飞书内的机器人分为 应用机器人 和 自定义机器人 两类 自定义机器人 自定义机器人仅支持单向往群组内推送消息,不支持与用户进行消息交互,一般适用于临时性在群中推送固定内容的场景。 …

深入解析:vue 批量自动引入并注册组件或路由

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ENSP 常用命令

一、华为设备命令视图 以下是华为设备的常用命令视图: 用户视图:< Huawei> 系统视图:< Huawei>system-view/sys [Huawei] 接口视图: < Huawei>system-view/sys [Huawei]interface/int Ethernet0…

Kubernetes权威指南-基础篇

Kubernetes(K8s)是Google开源的容器编排系统,源自Borg,现为CNCF旗舰项目。它自动化部署、扩展和管理容器化应用,提供服务发现、负载均衡、自我修复、配置管理等功能,是云原生时代的基础设施核心。Kubernetes入门…

【IEEE出版、已连续6届EI稳定检索】第七届机器学习、大数据与商务智能国际会议 (MLBDBI 2025)

第七届机器学习、大数据与商务智能国际会议(MLBDBI 2025) 2025 7th International Conference on Machine Learning, Big Data and Business Intelligence 在这里看会议官网详情 大会时间:2025年10月24-26日 大会地…

构建AI智能体:三十八、告别“冷启动”:看大模型如何解决推荐系统的世纪难题 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

office2024安装教程(附安装包)Office 2024 专业增强版下载安装激活详细图文步骤

一、为啥推荐 Office 2024 专业增强版?(新手必看) 现在办公真离不开好用的套件,Office 2024 专业增强版比 2021、2019 这些老版本强太多了 —— 不管是上班族做数据报表、写项目方案,还是学生写毕业论文、做答辩 …