设计模式简要介绍

设计模式是面向对象编程中解决特定问题的标准化方案,三大类(创建型、结构型、行为型)各有其核心特点和适用场景。以下是各类模式中常用模式的特点总结:

一、创建型模式(Creational Patterns)

核心目标 :控制对象的创建过程,隐藏创建细节,提高灵活性。
共同特点:封装对象创建逻辑,使客户端无需关注"如何创建",只需关注"使用对象"。

模式名称 核心特点 典型应用场景
单例模式 确保一个类仅存在一个实例,并提供全局访问点。 配置管理器、日志对象、线程池(避免资源重复占用)。
工厂方法模式 定义创建对象的接口,由子类决定具体实例化哪个类(延迟实例化到子类)。 框架中的对象创建(如Spring的BeanFactory)、数据库驱动选择(MySQL/PostgreSQL)。
抽象工厂模式 提供一个接口,用于创建一系列相关或依赖的对象家族,无需指定具体类。 跨平台组件库(如不同操作系统的按钮、文本框风格统一)、数据库连接池+事务管理器组合。
建造者模式 将复杂对象的构建过程与表示分离,允许分步构建不同表示的对象。 复杂对象创建(如SQL查询构建器、StringBuilder、对象序列化)。
原型模式 通过复制现有对象创建新对象,避免重复初始化开销。 大对象复制(如缓存中的对象克隆)、多线程场景下的对象隔离(每个线程一个原型副本)。

二、结构型模式(Structural Patterns)

核心目标 :处理类或对象的组合关系,实现更灵活的结构。
共同特点:通过继承或组合将不同类/对象组织成更强大的结构,同时保持松耦合。

模式名称 核心特点 典型应用场景
适配器模式 将一个类的接口转换为客户端期望的另一个接口,解决兼容性问题。 新旧系统集成(如Java的InputStreamReader将字节流适配为字符流)、第三方库接口适配。
装饰器模式 动态地给对象添加额外职责,不改变原有类结构(比继承更灵活)。 功能增强(如Java IO的BufferedReader装饰InputStream、Spring的AOP增强方法)。
代理模式 为对象提供代理层,控制对原对象的访问(如权限控制、延迟加载)。 远程代理(RPC调用)、虚拟代理(大图片延迟加载)、保护代理(权限校验)。
桥接模式 抽象与实现分离,使两者可独立变化(解决多维度变化导致的类爆炸)。 跨平台组件(如形状-颜色组合:圆形/方形与红/蓝独立变化)、消息发送(内容-渠道分离)。
组合模式 将对象组合成树形结构,使单个对象和组合对象的使用方式一致。 树形结构操作(如文件系统目录、组织架构树、XML节点解析)。
外观模式 为复杂系统提供统一入口(简化接口),隐藏内部复杂性。 框架对外接口(如JDBC的DriverManager封装底层数据库细节)、子系统集成。
享元模式 复用大量细粒度对象(共享内部状态),减少内存占用。 池化技术(线程池、连接池)、常量池(String常量池)、游戏中的重复角色模型。

三、行为型模式(Behavioral Patterns)

核心目标 :处理对象间的交互与职责分配,实现松耦合的通信。
共同特点:关注对象行为的协作,通过模式规范交互方式,提高可扩展性。

模式名称 核心特点 典型应用场景
策略模式 定义一系列算法,封装每个算法并使它们可互换(客户端动态选择算法)。 支付方式选择(信用卡/支付宝)、排序算法切换、折扣策略(满减/打折)。
观察者模式 定义一对多依赖关系,当对象状态变化时,所有依赖者自动收到通知。 事件监听(GUI按钮点击)、消息订阅(发布-订阅模式)、状态同步(缓存更新通知)。
模板方法模式 定义算法骨架,将步骤延迟到子类实现(固定流程,灵活实现细节)。 框架模板(如Spring的JdbcTemplate固定数据库操作流程)、生命周期方法(初始化-执行-销毁)。
迭代器模式 提供一种方法遍历聚合对象,无需暴露内部结构(统一遍历接口)。 集合遍历(Java的Iterator接口)、数据库结果集遍历、自定义容器遍历。
命令模式 将请求封装为对象,使请求可参数化、队列化或记录日志(解耦请求者与执行者)。 命令队列(任务调度)、撤销操作(如文本编辑器的Ctrl+Z)、事件总线。
责任链模式 将请求的处理者连成链,请求沿链传递,直到被处理(解耦请求与处理)。 权限校验链(多层级审批)、日志过滤链(按级别过滤)、异常处理链。
状态模式 允许对象在内部状态变化时改变行为,使对象看起来像修改了类。 状态机(订单状态:待支付→已支付→已发货)、游戏角色状态( idle→attack→defense)。
访问者模式 分离对象数据结构与操作,使操作可独立扩展(为不同元素添加新操作)。 复杂对象结构的多维度操作(如报表生成:同一数据生成不同格式报表)、AST语法树解析。

总结:设计模式的核心价值

  1. 标准化沟通:提供通用术语(如"单例"、"观察者"),使团队协作更高效。
  2. 解耦与灵活:通过封装、继承、组合等技巧,降低代码耦合度,提高可扩展性。
  3. 经验复用:将前人解决问题的经验抽象为模式,避免重复造轮子。

使用设计模式的关键是"理解场景而非死记实现"------过度设计(为用模式而用模式)反而会增加复杂性,应根据实际问题选择合适的模式。

相关推荐
Lei活在当下8 小时前
【业务场景架构实战】7. 多代智能手表适配:Android APP 表盘编辑页的功能驱动设计
android·设计模式·架构
澄澈i10 小时前
设计模式学习[20]---桥接模式
c++·学习·设计模式·桥接模式
o0向阳而生0o12 小时前
106、23种设计模式之备忘录模式(15/23)
设计模式·备忘录模式
小猪佩奇TONY13 小时前
C++ 学习(3) ----设计模式
c++·学习·设计模式
zhulangfly1 天前
轻松理解智能体设计模式(1/6):提示链(Prompt Chaining)
设计模式·prompt chaining
da_vinci_x1 天前
2D角色动画进阶:Spine网格变形与序列帧特效的混合工作流
游戏·设计模式·设计师·photoshop·spine·游戏策划·游戏美术
代码萌新知2 天前
设计模式学习(五)装饰者模式、桥接模式、外观模式
java·学习·设计模式·桥接模式·装饰器模式·外观模式
charlie1145141912 天前
理解C++20的革命特性——协程支持2:编写简单的协程调度器
c++·学习·算法·设计模式·c++20·协程·调度器
笨手笨脚の2 天前
设计模式-适配器模式
设计模式·适配器模式·结构型设计模式