设计模式常见面试题

返回 面试 · 单例专题 单例模式

详解 设计模式。面试重场景 + 优缺点,少背 UML。


分类

类型模式
创建型单例、工厂、抽象工厂、建造者、原型
结构型代理、装饰、适配器、桥接、组合、外观、享元
行为型策略、模板方法、观察者、责任链、迭代器、命令、状态

创建型

模式一句话场景
单例全局唯一实例配置、连接池
工厂方法子类决定创建哪个产品Logger、Payment 多实现
抽象工厂创建产品族UI 主题套件
建造者分步构建复杂对象StringBuilder、Lombok @Builder
原型clone 复制对象拷贝成本高时用原型

结构型(高频)

模式一句话场景
代理控制访问、增强Spring AOP、MyBatis Mapper、RPC stub
装饰动态叠加职责InputStream 包装链
适配器接口转换老 API 适配新接口
外观简化子系统入口Facade Service 聚合多 DAO

代理 vs 装饰:代理控制访问、常管理生命周期;装饰增强功能、可多层叠加。


行为型(高频)

模式一句话场景
策略算法可替换促销规则、支付方式
模板方法骨架固定、步骤可变AbstractList、JdbcTemplate
观察者发布-订阅Spring Event、MQ
责任链请求沿链传递Filter 链、Interceptor、审批流
状态行为随状态变订单状态机

与 Spring 对应

Spring模式
Bean 默认 singleton单例
FactoryBean工厂
AOP代理
ApplicationListener观察者
HandlerInterceptor 链责任链
Template 类(RestTemplate)模板方法

常见面试题

Q:单例几种写法?哪种最好?
A:饿汉、DCL+volatile、静态内部类、枚举(防反射/序列化)。见 单例模式

Q:JDK 动态代理和 CGLIB?
A:JDK 基于接口;CGLIB 子类继承;Spring 有接口用 JDK,否则 CGLIB。

Q:策略模式和 if-else?
A:策略用 Map+接口消除分支,符合开闭原则,易扩展新策略。

Q:装饰和代理区别?
A:意图不同:装饰为扩展功能;代理为控制访问、延迟加载、权限等。


相关笔记