结构型模式

笔记/Java/设计模式/结构型模式

总览见 设计模式概述 · 面试速查见 设计模式面试题 14 道

结构型模式关注如何把类/对象组合成更大结构:包装、适配、简化接口、共享细粒度对象等。

GoF 共 7 种:适配器、桥接、组合、装饰器、外观、享元、代理

代理模式#

在目标对象外包装一层,在调用前后织入逻辑(AOP 思想)。

客户端 → Proxy → 前置增强 → 目标对象 → 后置增强

代理模式调用链
代理模式调用链

实现要求代表
静态代理手写代理类简单场景
JDK 动态代理目标必须实现接口MyBatis Mapper
CGLIB继承目标类,不能 finalSpring AOP(无接口时)

Spring AOP、事务、日志、权限都是代理思想。

Spring AOP 与事务

外观模式#

为多个子系统提供统一简化入口,隐藏内部调用链。

示例:注册成功后依次调用短信、邮件、微信推送;门面 sendMsg() 封装三步,客户端只调一门面。

与代理区别:外观聚合简化,不做增强;代理控制访问并在前后织入逻辑。

其他结构型模式(速览)#

模式一句话
适配器将不兼容接口转为客户端期望的接口
装饰器动态叠加职责,比继承更灵活
桥接抽象与实现分离,独立变化
组合树形结构,统一对待单个与组合对象
享元共享细粒度对象,减少内存

结构型对比#

对比区别
代理 vs 装饰器控制访问/增强 vs 动态叠加职责
外观 vs 适配器简化一组接口 vs 转换不兼容接口
文章目录

文章目录