设计模式:结构型与行为型(代理/策略/观察者/模板)
代理(静态/JDK动态/CGLIB)、策略消除 if-else、观察者解耦、模板方法固定骨架。
本节你将能
说清四种常用结构/行为型模式的适用场景与 Spring 中的落地。
核心要点
- 代理:静态代理写死;JDK 动态代理基于接口(InvocationHandler);CGLIB 基于继承(不能代理 final)。
- 策略 Strategy:把算法族封装为独立类,运行时注入,消除大量 if-else。
- 观察者 Observer:发布-订阅,Spring 的 ApplicationEvent 即典型实现。
- 模板方法:父类定义算法骨架与钩子,子类填充步骤(如 JdbcTemplate)。
- 适配器/装饰器:适配器兼容接口,装饰器动态增强(如 Java IO 的 BufferedInputStream)。
面试连招
常被追问:JDK 动态代理与 CGLIB 区别?Spring AOP 默认用哪个?策略与工厂怎么选?
常见坑
用 CGLIB 代理 final 类/方法抛异常;观察者忘记反注册导致内存泄漏。