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

设计模式(Design Pattern)

概念

       设计模式(Design Pattern)是针对软件设计中重复出现的问题,总结出的一套经过验证的解决方案,

       它描述了在特定场景下如何组织代码结构、类与对象的关系,帮助开发者编写更高效、可维护、可扩展的代码。

分类

《设计模式:可复用面向对象软件的基础》根据用途,把设计模式分为三大类,共23种经典模式

(1)创建型模式(5 种)

解决 “对象创建” 的问题,隐藏创建细节,使代码更灵活。

       单例模式:保证一个类只有一个实例(如全局配置对象)。

       工厂模式:通过工厂类统一创建对象,屏蔽具体实现(如不同数据库连接的创建)。

       抽象工厂模式:创建一系列相关或依赖的对象(如一套 UI 组件的不同主题实现)。

       建造者模式:分步构建复杂对象(如自定义电脑配置:CPU、内存、硬盘分步组装)。

       原型模式:通过复制现有对象创建新对象(如大对象的快速克隆)。

(2)结构型模式(7 种)

解决 “类或对象的组合” 问题,优化代码结构。

       适配器模式:使不兼容的接口可以一起工作(如旧系统接口适配新框架)。

       装饰器模式:动态给对象添加功能(如给文本编辑器增加 “加粗”“斜体” 功能)。

       代理模式:为对象提供代理(如远程代理、权限代理)。

       外观模式:为复杂系统提供简单接口(如智能家居的 “一键场景” 封装多个设备操作)。

       桥接模式:分离抽象与实现,使二者可独立变化(如跨平台 UI 框架:抽象 “按钮”,实现 “Windows 按钮”“Linux 按钮”)。

       组合模式:将对象组合成树形结构,统一处理单个对象和组合对象(如文件系统的 “文件” 和 “文件夹”)。

       享元模式:复用大量相似对象,节省资源(如游戏中重复出现的道具、粒子效果)。

(3)行为型模式(11 种)

解决 “对象之间的交互与职责分配” 问题,优化协作逻辑。

       策略模式:定义算法家族,动态切换(如电商的多种折扣计算方式)。

       模板方法模式:定义流程骨架,子类实现具体步骤(如做饭:固定 “备料→烹饪→装盘”,子类实现 “做川菜”“做粤菜”)。

       观察者模式:对象状态变化时,自动通知依赖它的对象(如公众号推送、事件监听)。

       迭代器模式:提供遍历集合的统一接口(如 Python 的for循环遍历列表、字典)。

       责任链模式:将请求传递给多个处理器,直到被处理(如审批流程:员工→经理→总监)。

       命令模式:将操作封装为对象,支持撤销、排队(如遥控器按钮控制家电)。

       备忘录模式:保存对象状态,以便恢复(如游戏存档、文档撤销功能)。

       状态模式:对象状态变化时,行为随之改变(如订单状态:待支付→已支付→已发货)。

       访问者模式:在不修改类的前提下,增加对类的新操作(如报表生成工具访问不同数据对象)。

       中介者模式:用中介者减少对象间的直接耦合(如聊天室的服务器转发消息)。

       解释器模式:定义语言语法的解释器(如正则表达式解析器、公式计算器)。

单例:

一个类只有一个实例,全局访问,节省内存

一般对象创建

class tools:msg="I am OK"def shout():print(msg)# 调用创建两个对象,需要消耗两块内存空间
obj_1 = tools()
obj_1.shout()obj_2 = tools()
obj_2.shout()

单例对象创建

class tools:msg="I am OK"def shout():print(msg)# 调用创建1个对象,需要消耗1块内存空间
tool=tools()obj_1 = tool
obj_1.shout()obj_2 = tool
obj_2.shout()

工厂:

不直接使用类创建对象,通过创建一个工厂函数调用类创建对象,统一创建对象入口,方便修改维护

class 类1:pass
class 类2:pass
class 类3:passdef 工厂函数名(目标类名):if 类1==目标类名:return 类1()elif 类2==目标类名:return 类2()else:return 类3()# 调用
工厂函数名(类1)

http://www.xdnf.cn/news/17389.html

相关文章:

  • C++ 黑马 内存分配模型
  • 通过trae开发你的第一个Chrome扩展插件
  • 2025年APP开发趋势:4大方向重构行业格局
  • [激光原理与应用-224]:机械 - 机械设计与加工 - 常见的术语以及含义
  • python | numpy小记(十):理解 NumPy 中的 `np.random.multinomial`(进阶)
  • 医学统计(随机对照研究分类变量结局数据的统计策略2)
  • 面对信号在时频平面打结,VNCMD分割算法深度解密
  • 【接口自动化】-5- 接口关联处理
  • 比特币现货和比特币合约的区别与联系
  • 金融机构在元宇宙中的业务开展与创新路径
  • nginx+lua+redis案例
  • AI智能编程工具汇总
  • Numpy基础(通用函数)
  • [IOMMU]基于 AMD IOMMU(AMD‑Vi/IOMMUv2)的系统化总结与落地方案
  • 【C++】模版进阶
  • FMS 2025存储峰会获奖技术全景解读
  • C/C++基础详解(二)
  • AcWing 4579. 相遇问题
  • Day38 Dataset和Dataloader类
  • Datawhale AI夏令营-记录2
  • NVIDIA Jetson实战笔记
  • 【c++】探秘Loop机制:C++中优雅的双向数据交互模式
  • 力扣 hot100 Day70
  • 【Python 高频 API 速学 ⑥】
  • CrystalDiskInfo 9.0.1 安装教程 - 硬盘检测工具下载安装步骤详解
  • 基于迁移学习的伺服电机轴承故障诊断
  • Python变量引用拷贝
  • 求和算法的向后稳定性 backward stable
  • 大模型“涌现”背后的暗线——规模、数据、目标函数的三重协奏
  • Spring 的原理探究