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

23种设计模式概览

23种设计模式详解(基于GoF经典分类)

设计模式是前辈程序员在解决软件设计问题时总结的可复用方案。根据GoF(四人帮)的分类,23种设计模式可分为创建型结构型行为型三大类。以下是详细解析:

一、创建型模式(5种)

核心目标:优化对象的创建过程,提升灵活性和资源管理效率。

  1. 工厂方法模式(Factory Method)
    • 机制:定义一个创建对象的接口,由子类决定实例化哪个类。
    • 场景:需要延迟实例化或子类决定具体类时(如JDBC驱动加载)。
    • 示例LoggerFactory根据配置返回FileLoggerDatabaseLogger
  2. 抽象工厂模式(Abstract Factory)
    • 机制:创建一系列相关或依赖对象,无需指定具体类。
    • 场景:需要产品族(如不同操作系统主题组件)时。
    • 示例GUIFactory生成WindowsButtonMacButton
  3. 单例模式(Singleton)
    • 机制:确保类唯一实例,提供全局访问点。
    • 场景:日志记录、线程池、配置管理器等需唯一资源的场景。
    • 实现:双重检查锁(DCL)或静态内部类方式。
  4. 建造者模式(Builder)
    • 机制:分离复杂对象构建与表示,支持分步构建。
    • 场景:对象构造过程复杂且需灵活组合时(如游戏角色装备搭配)。
    • 示例ComputerBuilder分步设置CPU、内存、硬盘。
  5. 原型模式(Prototype)
    • 机制:通过复制原型创建新对象,避免重复初始化。
    • 场景:对象创建成本高或需保留原始状态时(如Excel模板复制)。
    • 实现clone()方法深度复制对象。
二、结构型模式(7种)

核心目标:构建高效、可扩展的系统结构,降低类与对象间的耦合。

  1. 适配器模式(Adapter)
    • 机制:转换接口以兼容不兼容的类。
    • 场景:旧系统集成或第三方库适配(如电压转换器)。
    • 示例LegacySystemAdapter将旧API转换为新接口。
  2. 桥接模式(Bridge)
    • 机制:抽象与实现分离,独立变化。
    • 场景:需多维度扩展时(如跨平台绘图工具:Windows/Mac + 矢量/位图)。
    • 示例DrawingAPI分离WindowsRendererMacRenderer
  3. 组合模式(Composite)
    • 机制:树形结构表示部分-整体,统一访问。
    • 场景:文件系统、组织架构管理。
    • 示例FileFolder统一处理为Component
  4. 装饰器模式(Decorator)
    • 机制:动态添加对象职责,替代继承。
    • 场景:需灵活扩展功能时(如咖啡订单:浓缩+奶泡+糖浆)。
    • 示例Beverage通过MilkDecoratorSugarDecorator动态添加配料。
  5. 外观模式(Facade)
    • 机制:简化复杂子系统接口。
    • 场景:API封装或新手引导流程。
    • 示例ComputerFacade一键启动CPU、内存、硬盘。
  6. 享元模式(Flyweight)
    • 机制:共享细粒度对象,减少资源消耗。
    • 场景:大量相似对象场景(如五子棋棋子)。
    • 示例ChessPieceFactory复用黑白棋子对象。
  7. 代理模式(Proxy)
    • 机制:控制对象访问,添加间接层。
    • 场景:权限控制、远程调用或日志记录(如明星经纪人)。
    • 示例ImageProxy延迟加载大图资源。
三、行为型模式(11种)

核心目标:增强对象间通信与协作,提升代码复用和可维护性。

  1. 责任链模式(Chain of Responsibility)
    • 机制:请求沿处理链传递,直至被处理。
    • 场景:权限审批、异常拦截。
    • 示例ApprovalHandler链式处理请假申请。
  2. 命令模式(Command)
    • 机制:请求封装为对象,支持撤销/重做。
    • 场景:操作日志、任务队列(如文本编辑器撤销功能)。
    • 示例TextEditorCommand记录复制、粘贴操作。
  3. 解释器模式(Interpreter)
    • 机制:解释语言文法,构建解释器。
    • 场景:简单规则引擎或数学表达式解析。
    • 示例MathExpressionInterpreter解析并计算表达式。
  4. 迭代器模式(Iterator)
    • 机制:统一访问集合元素,不暴露内部结构。
    • 场景:遍历容器对象(如Java集合框架)。
    • 示例ListIterator遍历ArrayList
  5. 中介者模式(Mediator)
    • 机制:封装对象交互,降低耦合。
    • 场景:聊天室、航班预订系统。
    • 示例ChatRoomMediator协调用户消息发送。
  6. 备忘录模式(Memento)
    • 机制:捕获对象状态,支持恢复。
    • 场景:游戏存档、撤销操作。
    • 示例GameSnapshot保存/恢复游戏进度。
  7. 观察者模式(Observer)
    • 机制:定义一对多依赖,状态变化通知观察者。
    • 场景:事件驱动系统、股票报价更新。
    • 示例StockTicker通知所有订阅者价格变动。
  8. 状态模式(State)
    • 机制:对象行为随状态改变。
    • 场景:订单状态机、电梯控制。
    • 示例OrderPendingShippedDelivered状态切换行为。
  9. 策略模式(Strategy)
    • 机制:封装可互换算法,动态选择。
    • 场景:支付方式切换、排序算法选择。
    • 示例SortStrategy根据参数选择快速排序或归并排序。
  10. 模板方法模式(Template Method)
    • 机制:定义算法骨架,子类实现步骤。
    • 场景:框架设计、算法复用(如Spring MVC处理流程)。
    • 示例DataProcessor定义validate()process()抽象方法。
  11. 访问者模式(Visitor)
    • 机制:操作作用于对象结构,不修改类。
    • 场景:报表生成、编译器语法分析。
    • 示例TaxVisitor计算不同Item的税费。
设计模式选择原则
  • 开闭原则:对扩展开放,对修改关闭。
  • 单一职责:一个类只负责一个功能。
  • 里氏替换:子类可替换父类而不影响程序。
  • 依赖倒置:依赖抽象而非具体实现。

通过合理选择设计模式,可显著提升代码的可读性、可维护性和可扩展性。实际应用中需结合场景权衡,避免过度设计。后续将会有一系列的学习研究,采用java语言的实际例子,针对这23种设计模式做一个详细分解。

相关文章:

  • LeetCode Hot100刷题——划分字母区间
  • C++学习-入门到精通【11】输入/输出流的深入剖析
  • 5.2 初识Spark Streaming
  • day15 leetcode-hot100-28(链表7)
  • LeetCode hot100-9
  • 网络系统中安全漏洞扫描为何重要?扫描啥?咋扫描?
  • qwen 2.5 并行计算机制:依靠 PyTorch 和 Transformers 库的分布式能力
  • MySQL锁机制
  • 【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市
  • QT入门学习
  • 4.2.4 Spark SQL 数据写入模式
  • CppCon 2014 学习:Pragmatic Type Erasure
  • vue3 el-input type=“textarea“ 字体样式 及高度设置
  • Axure中继器交互完全指南:核心函数解析×场景实战×避坑策略(懂得才能应用)
  • 2025山东CCPC题解
  • 鸿蒙编译ffmpeg库
  • leetcode17.电话号码的字母组合:字符串映射与回溯的巧妙联动
  • 什么是trace,分布式链路追踪(Distributed Tracing)
  • 自动驾驶系统研发系列—端到端自动驾驶:愿景、陷阱与现实博弈
  • [笔记]一般小信号测量方法
  • wordpress 去掉评论框/北京网站优化步
  • 大气企业网站/站长统计软件
  • 百度站长工具seo查询/软文时光发稿平台
  • 优惠活动制作网站/如何建立一个自己的网站
  • 做网站设计服务商/电商培训机构有哪些哪家比较好
  • 怎么建设公司网站信息/二十条优化措施全文