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

设计模式简要介绍

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

一、创建型模式(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. 经验复用:将前人解决问题的经验抽象为模式,避免重复造轮子。

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

http://www.dtcms.com/a/449569.html

相关文章:

  • Python 数据结构综合速查:列表 / 字典 / 集合 / 元组对比
  • 宁波建设工程报名网站搭建一个网站的具体步骤
  • 第十七章:遍历万象,步步为营——Iterator的迭代艺术
  • 记一次vcenter server 无法同步主机的故障处理过程
  • 手搓20颗芯片|专栏开篇:从0到1搭建芯片设计与UVM验证体系
  • 《 Linux 点滴漫谈: 三 》Linux 的骨架:文件系统与目录结构的完整图谱
  • 跨境自建站模板库存网站建设公司
  • 【Web安全】转义字符注入?转义也会失效的SQL注入
  • 虚拟机中建设iis网站网站推广洛阳
  • python+vue高校新生报到管理系统设计(源码+文档+调试+基础修改+答疑)
  • 中秋连连看小游戏开发完整教程
  • 产品图案设计网站一起做网店网站入驻收费
  • traffic-filter inbound acl 概念及题目
  • Python3 XML 解析
  • 驾驭涌现的艺术:自组织系统——解锁复杂世界的创新与适应力
  • 青岛做外贸网站建设西安网站建设培训中心
  • 【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
  • MySQL 8.0.26崩溃恢复全解析
  • 北京哪个网站最好湖南网络营销
  • 【Linux】MobaXterm 工具介绍
  • 2025-10-6学习笔记
  • 【面板数据】各国数字服务贸易进出口额数据集(2005-2023年)
  • dede怎么做商城网站个人网站免费制作平台
  • Oracle OCP认证考试题目详解082系列第57题
  • 嵌入式开发学习日志36——stm32之USART串口通信前述
  • Linux中capability权能管理的实现
  • Python 语法与注释详解
  • joomla 网站建设教程合肥网站推广公司
  • 介绍一个做美食的网站网店网站技术方案
  • 电源——BUCK电路设计实战