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

软件设计模式

创建型模式(Creational Patterns)

关注对象的创建机制,提高代码的灵活性和可复用性。

  • 单例模式(Singleton)
    确保一个类只有一个实例,并提供全局访问点。
    示例:数据库连接池、日志系统。

  • 工厂方法模式(Factory Method)
    定义创建对象的接口,但由子类决定实例化哪个类。
    示例:不同品牌的汽车工厂生产各自的汽车。

  • 抽象工厂模式(Abstract Factory)
    创建相关或依赖对象的家族,而无需指定具体类。
    示例:跨平台的 UI 组件库(如 Windows/Mac 的按钮和文本框)。

  • 建造者模式(Builder)
    分步骤构建复杂对象,分离构造过程和表示。
    示例:构造一个包含多种部件的复杂对象(如电脑组装)。

  • 原型模式(Prototype)
    通过复制现有对象来创建新对象,避免重复初始化。
    示例:克隆一个配置好的对象(如游戏中的敌人复制)。


2. 结构型模式(Structural Patterns)

关注类和对象的组合,形成更大的结构。

  • 适配器模式(Adapter)
    将不兼容的接口转换为可兼容的接口。
    示例:将旧系统的 API 适配到新系统。

  • 装饰器模式(Decorator)
    动态地为对象添加额外职责,避免子类爆炸。
    示例:为咖啡添加糖、牛奶等配料。

  • 代理模式(Proxy)
    为其他对象提供一种代理以控制对这个对象的访问。
    示例:虚拟代理(延迟加载图片)、保护代理(权限控制)。

  • 外观模式(Facade)
    提供统一的接口来简化子系统复杂性。
    示例:一键启动电脑(封装了CPU、内存、硬盘等启动过程)。

  • 桥接模式(Bridge)
    将抽象与实现分离,使它们可以独立变化。
    示例:不同形状(圆形、方形)和颜色(红、蓝)的组合。

  • 组合模式(Composite)
    将对象组合成树形结构以表示“部分-整体”层次。
    示例:文件系统中的文件夹和文件。

  • 享元模式(Flyweight)
    通过共享技术高效地支持大量细粒度对象。
    示例:游戏中的重复粒子(如树木、子弹)。


3. 行为型模式(Behavioral Patterns)

关注对象之间的通信和职责分配。

  • 策略模式(Strategy)
    定义一系列算法,封装它们并使它们可互换。
    示例:排序算法(快速排序、冒泡排序)的动态切换。

  • 观察者模式(Observer)
    定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者自动更新。
    示例:事件监听系统、消息订阅。

  • 命令模式(Command)
    将请求封装为对象,支持请求的排队、日志或撤销。
    示例:遥控器按钮绑定不同命令。

  • 模板方法模式(Template Method)
    定义算法的骨架,将某些步骤延迟到子类实现。
    示例:冲泡饮料的固定流程(咖啡 vs 茶)。

  • 迭代器模式(Iterator)
    提供一种方法顺序访问聚合对象的元素,而不暴露其内部表示。
    示例:遍历集合(列表、树等)。

  • 状态模式(State)
    允许对象在内部状态改变时改变其行为。
    示例:电梯的不同状态(运行、停止、故障)。

  • 责任链模式(Chain of Responsibility)
    将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
    示例:审批流程(经理→总监→CEO)。

  • 中介者模式(Mediator)
    用一个中介对象封装一系列对象的交互。
    示例:聊天室中的消息中转。

  • 访问者模式(Visitor)
    在不修改类的前提下为类添加新的操作。
    示例:对文档结构(HTML DOM)的统计分析。

  • 备忘录模式(Memento)
    捕获并外部化对象的内部状态以便后续恢复。
    示例:游戏存档。

  • 解释器模式(Interpreter)
    定义语言的文法,并解释执行。
    示例:正则表达式解析、SQL 解释。

相关文章:

  • vue+vite 减缓首屏加载压力和性能优化
  • dea如何使用git
  • python程序打包——nuitka使用
  • 「数据可视化 D3系列」入门第三章:深入理解 Update-Enter-Exit 模式
  • Redis - 讲清楚集群模式(Redis Cluster)(上)
  • C++ 创龙UDP通讯demo
  • 如何在vue3项目中使用 AbortController取消axios请求
  • UWB技术与5G、物联网结合的应用前景
  • c# 根据圆面积计算最大芯片数量
  • Java虚拟机面试题:类加载机制
  • 【grafana原生告警中心配置飞书机器人告警】
  • 微信小程序-自定义toast
  • 最近准备写个Playbook,详细点的指导手册,作为后续的销售培训文件,也趁着这个机会整理下产品思路,尤其是对于UALink,UEC新的联盟规范的测试用例
  • 深入剖析 FastAdmin 权限验证体系:与 UserRule 表的紧密关联及最佳实践
  • 智能合约安全审计平台——可视化智能合约漏洞扫描
  • *差分自回归移动平均模型(ARIMA)
  • # 从零开发小红书风格Flutter应用:图片上传功能实现踩坑记录
  • Spark-SQL2
  • OpenCV中的轮廓近似方法详解
  • MCP Server 开发实战 | 大模型无缝对接 Grafana
  • 人民日报钟声:中方维护自身发展利益的决心不会改变
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水
  • 中邮保险斥资8.69亿元举牌东航物流,持股比例达5%
  • 重庆动物园大熊猫被游客扔玻璃瓶,相同地方曾被扔可乐瓶
  • 巴方称印军发动24起袭击,巴境内6处地点遭袭致8人死亡
  • 短剧剧组在贵州拍戏突遇极端天气,演员背部、手臂被冰雹砸伤