11.3设计模式-新

一、设计模式概述

(一)模式层次体系

  • 架构模式:软件设计中的高层决策,如C/S结构、B/S结构,反映系统整体分布方案,特点是看到名称即可理解系统分布方式(客户端/服务器、浏览器/服务器)。
  • 设计模式:中间层解决方案,描述重复发生问题的核心解法,包含23种标准模式,具备四要素(模式名称、问题描述、解决方案、实施效果)。
  • 惯用法:与具体编程语言相关的最低层实现技巧,如C++的引用计数,重点关注编码阶段的构件关系实现。
    (二)设计模式四要素
  • 名称标识:每种模式的唯一命名(如工厂方法)。
  • 问题场景:明确模式适用的具体问题情境。
  • 解决方案:模式的核心设计思路和实现方式。
  • 效果评估:应用该模式带来的优缺点和影响。
    (三)学习策略与考点
  1. 分类记忆法
  • 优先记忆11种创建型和结构型模式,剩余12种自动归为行为型模式。
  • 创建型典型:工厂方法、抽象工厂、原型、单例、构建器。
  • 结构型典型:适配器、桥接、组合、装饰、外观、享元、代理。
  1. 三大考点
  • 模式分类归属(高频考点)。
  • 应用场景匹配(给出描述选对应模式)。
  • 类图识别(常通过英文标签提示,如组合模式标"Composite")。
  1. 学习建议
  • 重点掌握定义和应用场景,暂不深究类图细节。
  • 采用二八定律,用20%时间掌握80%高频考点。
  • 考试后可延伸阅读《设计模式》专著深入理解。
    (四)模式分类总览
  • 创建型(5种):工厂方法、抽象工厂、原型、单例、构建器。
  • 结构型(7种):适配器、桥接、组合、装饰、外观、享元、代理。
  • 行为型(11种):职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者。

记忆技巧:创建型最少(5种),结构型次之(7种),其余均为行为型;带下划线模式可同时作为类和对象模式使用。

二、设计模式分类详解

(一)创建型设计模式(5种)

  1. 工厂方法模式
  • 定义:定义一个创建对象的接口,但由子类决定需要实例化哪一个类,使得子类实例化过程推迟。
  • 记忆关键字:子类决定实例化。
  • 讲解:类似现实中的工厂,用于创建对象;与抽象工厂模式不同,工厂方法模式通过一个工厂创建不同类型对象,而非创建多个工厂。
  1. 构建器模式
  • 定义:将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。
  • 记忆关键字:类和构造分离。
  • 讲解:适用于构造复杂对象(如游戏角色),将构造过程与表示分离,可灵活组合对象特性(如角色的身体、脸部、发型等)。
  1. 原型模式
  • 定义:用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。
  • 记忆关键字:原型实例,拷贝。
  • 讲解:通过拷贝现有对象创建新对象,类似编程中的代码复制粘贴,新对象可在原型基础上修改以适应新需求。
  1. 单例模式
  • 定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。
  • 记忆关键字:唯一实例。
  • 讲解:确保某个类仅存在一个实例,提供全局访问点,常用于控制资源访问(如数据库连接池)。
  1. 抽象工厂模式
  • 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  • 记忆关键字:一系列相关对象,接口统一。
  • 讲解:聚焦于创建"一组相关对象",与工厂方法模式的"单个对象创建"形成区别,适用于需要统一管理相关对象创建的场景。
    (二)结构型设计模式(7种)
  1. 适配器模式
  • 定义:将一个类的接口转换成用户希望得到的另一种接口,使原本不相容的接口得以协同工作。
  • 记忆关键字:转换,兼容接口。
  • 讲解:类似现实中的电源适配器,用于转换接口匹配不同设备;编程中可通过定义新函数,调用两个功能相似但接口不同的函数,实现兼容。
  1. 桥接模式
  • 定义:将类的抽象部分和它的实现部分分离开来,使它们可以独立的变化。
  • 记忆关键字:抽象和实现分离。
  • 讲解:分离抽象与实现,使两者可独立变化,例如将资料的载体(纸质、电子)和形式(文字、图片)分离,组合出不同资料类型。
  1. 组合模式
  • 定义:将对象组合成树型结构以表示"整体-部分"的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
  • 记忆关键字:整体-部分,树形结构。
  • 讲解:强调整体与部分的关系,常用于表示树形结构(如公司组织架构、文件系统),方便统一处理整体和部分的操作。
  1. 装饰模式
  • 定义:动态的给一个对象添加一些额外的职责,提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。
  • 记忆关键字:附加职责。
  • 讲解:允许运行时动态给对象添加职责,无需通过继承扩展功能,类似吃火锅时动态添加调料(麻辣、牛肉等)。
  1. 外观模式
  • 定义:定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用。
  • 记忆关键字:对外统一接口。
  • 讲解:通过高层接口简化子系统使用,类似智能家居的家庭模式,可通过统一接口控制多个电器设备。
  1. 享元模式
  • 定义:提供支持大量细粒度对象共享的有效方法。
  • 记忆关键字:细粒度,共享。
  • 讲解:通过共享细粒度对象减少内存占用、提升性能,常用于汉字输入法、语音识别等场景(如共享常见汉字对象,避免重复创建)。
  1. 代理模式
  • 定义:为其他对象提供一种代理以控制这个对象的访问。
  • 记忆关键字:代理控制。
  • 讲解:通过代理对象控制对实际对象的访问,类似桌面快捷方式,可通过代理便捷访问软件,无需直接操作软件本身。
    (三)行为型设计模式(11种)
    核心特征:反映类和对象的行为及动态交互,与创建型(静态创建)、结构型(静态结构)模式形成对比。
    记忆技巧:记住创建型(5种)和结构型(7种)后,剩余模式均属于行为型。
  1. 职责链模式
  • 核心机制:通过链式结构传递请求,每个处理对象都有机会处理或传递给下一级。
  • 典型应用:OA系统请假流程(员工→部门主管→部门经理→总经理)。
  • 优势:降低发送者与接收者耦合度,新增处理者只需修改链结构。
  • 记忆关键字:传递请求、职责链接。
  1. 命令模式
  • 核心特性:将请求封装为独立命令对象,支持撤销/重做操作。
  • 典型场景:需要记录操作历史或实现"回退"功能的系统。
  • 实现要点:命令对象需包含执行和撤销两个基本方法。
  • 记忆关键字:可撤销、日志记录。
  1. 解释器模式
  • 核心功能:为特定语言定义文法规则和解释执行机制。
  • 典型应用:游戏地图编辑器(如红色警戒自定义规则)。
  • 类比理解:相当于实现一个专用虚拟机。
  • 记忆关键字:解释器、虚拟机。
  1. 迭代器模式
  • 核心价值:提供统一接口遍历集合元素,隐藏内部实现细节。
  • 典型应用:各种集合类(List/Set等)的遍历操作。
  • 设计原则:符合迪米特法则(最少知识原则)。
  • 记忆关键字:顺序访问、不暴露内部。
  1. 中介者模式
  • 核心思想:通过中介对象集中管理对象间交互,将网状结构转为星型结构。
  • 典型应用:ESB(企业服务总线)、房产中介系统。
  • 优势:降低对象间直接依赖,交互逻辑集中管理。
  • 记忆关键字:不直接引用、多对多转一对多。
  1. 备忘录模式
  • 核心功能:捕获并外部化对象状态,支持状态恢复。
  • 典型场景:游戏存档/读档、事务回滚。
  • 实现要点:需保持封装性,不暴露对象内部细节。
  • 记忆关键字:保存和恢复、存档读档。
  1. 观察者模式
  • 核心机制:一对多依赖关系,主题状态变化自动通知所有观察者。
  • 典型应用:微信公众号订阅、事件监听系统。
  • 组件角色:Subject(被观察者)、Observer(观察者)。
  • 记忆关键字:通知、自动更新。
  1. 状态模式
  • 核心思想:将状态封装为独立类,状态改变导致行为改变。
  • 典型应用:会员等级系统(普通/VIP会员不同权限)。
  • 优势:消除大量条件判断,符合开闭原则。
  • 记忆关键字:状态变成类、行为随状态变。
  1. 策略模式
  • 核心价值:封装可互换的算法族,使算法独立于客户端。
  • 典型应用:排序算法切换(冒泡/快速/希尔排序)。
  • 实现要点:策略接口统一,具体策略实现可替换。
  • 记忆关键字:算法替换、封装变化。
  1. 模板方法模式
  • 核心机制:定义算法骨架,具体步骤延迟到子类实现。
  • 典型应用:框架设计中的钩子方法。
  • 优势:代码复用,保持算法结构不变。
  • 记忆关键字:算法骨架、步骤延迟。
  1. 访问者模式
  • 核心思想:数据结构与操作分离,便于新增操作。
  • 典型场景:需频繁添加新操作但数据结构稳定的系统。
  • 类比理解:人类固有属性不变但行为可变(爬→走→飞)。
  • 记忆关键字:数据和操作分离、操作可扩展。
    三、考试真题解析
    (一)例题1:设计模式的分类与定义

题目解析

  • 抽象工厂模式:创建型模式,提供创建一系列相关或相互依赖对象的接口,无需指定具体类。
  • 桥接模式(Bridge):结构型模式,将类的抽象部分与实现部分分离,使两者可独立变化。
  • 命令模式(Command):行为型模式,将请求封装为对象,支持参数化请求、排队、日志记录及撤销操作。
  • 答案:(54)D; (55)A; (56)B; (57)A
    (二)例题2:桥接模式在绘图软件中的应用

题目解析

  • 设计模式:桥接模式,用于分离抽象部分与实现部分,使两者可独立变化。
  • 定义实现类接口:本例中,Shape定义了实现类接口,用于绘制不同图形。
  • 适用情况:不希望在抽象和它的实现部分之间有固定判定关系的场景。
  • 模式类型:桥接模式属于结构型模式,具体为结构型对象模式。
  • 答案:C; A; A; B
  • 解题技巧:结合桥接模式的定义和特点,区分结构型、创建型、行为型模式的差异,即可准确作答。
    四、知识小结
    知识点
    核心内容
    考试重点/易混淆点
    难度系数
    面向对象技术
    基本概念、开发过程、UML图、关系、设计模式
    设计模式的分类、定义、应用场景

    设计模式概述
    系统模式分为三层:架构模式、设计模式、惯用法
    三层模式的区别与联系

    设计模式分类
    创建型、结构型、行为型
    三大类设计模式的区分

    创建型设计模式
    抽象工厂、工厂方法、构建器、原型、单例
    每种模式的定义、应用场景、英文对照

    结构型设计模式
    适配器、桥接、组合、装饰、外观、享元、代理
    每种模式的定义、应用场景、英文对照

    行为型设计模式
    职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者
    每种模式的定义、应用场景、英文对照

    设计模式学习方法
    掌握定义、关键字、应用场景,理解图形
    图形记忆与理解

    考试策略
    重点掌握分类、定义、应用场景,图形题较少
    分类与定义的区分

    课后建议
  1. 重点巩固高频考点(模式分类、应用场景匹配),通过习题加深理解;
  2. 总结每种模式的"定义+记忆关键字+典型应用",便于快速记忆;
  3. 类图识别题重点关注英文标签,结合模式核心特征判断;
  4. 考试后可延伸阅读《设计模式》专著,深入理解模式的实现细节。
相关推荐
cmpxr_3 小时前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式
无籽西瓜a5 小时前
【西瓜带你学设计模式 | 第十五期 - 策略模式】策略模式 —— 算法封装与动态替换实现、优缺点与适用场景
java·后端·设计模式·软件工程·策略模式
Kel21 小时前
Claude Code 架构深度剖析:从终端输入到大模型响应的完整过程
人工智能·设计模式·架构
￰meteor1 天前
23种设计模式 -【观察者】
设计模式
妙蛙种子3111 天前
【Java设计模式 | 创建者模式】 抽象工厂模式
java·开发语言·后端·设计模式·抽象工厂模式
怨言.1 天前
设计模式之模板方法模式
设计模式·模板方法模式
无籽西瓜a1 天前
【西瓜带你学设计模式 | 第十四期 - 享元模式】享元模式 —— 内外状态分离与对象共享实现、优缺点与适用场景
java·设计模式·软件工程·享元模式
七夜zippoe1 天前
设计模式在Spring等框架中的应用:模板方法、工厂、适配器等
java·spring·设计模式·模板·适配器·工厂
panzer_maus1 天前
工厂模式、代理模式与单例模式的介绍
java·设计模式·代理模式