Java 面试题:设计模式(单例/工厂/代理/策略)

一、单例模式

双重检查锁(DCL)最经典,instance 必须 volatile 防指令重排产生半初始化对象:

private static volatile Singleton instance;
public static Singleton get() {
    if (instance == null) {
        synchronized (Singleton.class) {
            if (instance == null) instance = new Singleton();
        }
    }
    return instance;
}

二、工厂与代理

模式 作用 Spring 中的体现
工厂 封装对象创建 BeanFactory / FactoryBean
代理 增强目标方法 AOP(JDK/CGLIB)
模板方法 固定骨架、留扩展点 JdbcTemplate / RedisTemplate
策略 算法可替换 InstantiationStrategy

三、观察者 / 责任链

  • 观察者:事件通知(Spring ApplicationEvent);
  • 责任链:过滤器、拦截器依次处理;
  • 策略:消除 if-else 分支(如多种支付方式)。

面试重点不是背 UML,而是”这个模式解决了什么耦合/扩展问题、在框架哪用”。