总览见 设计模式概述 · 面试速查见 设计模式面试题 14 道。
结构型模式关注如何把类/对象组合成更大结构:包装、适配、简化接口、共享细粒度对象等。
GoF 共 7 种:适配器、桥接、组合、装饰器、外观、享元、代理。
代理模式
在目标对象外包装一层,在调用前后织入逻辑(AOP 思想)。
客户端 → Proxy → 前置增强 → 目标对象 → 后置增强
| 实现 | 要求 | 代表 |
|---|---|---|
| 静态代理 | 手写代理类 | 简单场景 |
| JDK 动态代理 | 目标必须实现接口 | MyBatis Mapper |
| CGLIB | 继承目标类,不能 final | Spring AOP(无接口时) |
Spring AOP、事务、日志、权限都是代理思想。
外观模式
为多个子系统提供统一简化入口,隐藏内部调用链。
示例:注册成功后依次调用短信、邮件、微信推送;门面 sendMsg() 封装三步,客户端只调一门面。
与代理区别:外观聚合简化,不做增强;代理控制访问并在前后织入逻辑。
其他结构型模式(速览)
| 模式 | 一句话 |
|---|---|
| 适配器 | 将不兼容接口转为客户端期望的接口 |
| 装饰器 | 动态叠加职责,比继承更灵活 |
| 桥接 | 抽象与实现分离,独立变化 |
| 组合 | 树形结构,统一对待单个与组合对象 |
| 享元 | 共享细粒度对象,减少内存 |
结构型对比
| 对比 | 区别 |
|---|---|
| 代理 vs 装饰器 | 控制访问/增强 vs 动态叠加职责 |
| 外观 vs 适配器 | 简化一组接口 vs 转换不兼容接口 |