常见设计模式-复习

常见设计模式

1.单例模式 (Singleton Pattern)

核心思想:确保一个类在整个系统中只有一个实例,并提供一个全局访问点

  • 在Java中,单例不只是简单的“唯一”,还要考虑线程安全、反射攻击、序列化陷阱

  • 实现方式

public class Singleton {
    private Singleton(){}
    private static class Holder{
        private static final Singleton INSTANCE = new Singleton();
    }
   
     public static Singleton getInstance() {
        return Holder.INSTANCE; // 延迟加载且线程安全
    }
}

理由:静态内部类单例利用 JVM 的类加载和初始化机制,在不使用任何同步锁的情况下,实现了线程安全的懒加载, 是一种性能和安全性都最优的单例实现方式。

由此可以切入了解JVM 的类加载和初始化机制

2.策略模式 (Strategy Pattern)

核心思想:定义一系列算法,将每一个算法封装起来,并使它们可相互替换。

  • 其核心是消除冗长的 if-elseswitch 语句,符合“开闭原则”。
//定义一个支付接口
public interface PaymentStrategy { void pay(int amount); }


// 环境角色(通过Map消除if-else)
public class PaymentContext {
    private static final Map<String, PaymentStrategy> strategies 
        = new HashMap<>();
    static {
    strategies.put("ALIPAY", amount -> System.out.println("使用支付宝支付:" + amount));
    strategies.put("WECHAT", amount -> System.out.println("使用微信支付:" + amount));
    }
    public void execute(String type, int amount) {
        strategies.get(type).pay(amount);
    }
}


  • 在 Spring 环境中,策略模式通常结合 IoC 容器实现,将各策略实现类注册为 Bean,并通过注入 Map<String, Strategy>List<Strategy> 实现策略自动发现与扩展。

常常应用在选择分支多的场景,使其代码符合开闭原则

3.工厂模式 (Factory Pattern)

核心思想:定义一个创建对象的接口,让子类决定实例化哪一个类。

  • 工厂模式通过解耦“使用者”和“创建者”,让代码在面对对象变化时更具弹性。
  • 简单工厂 vs 工厂方法
    • 简单工厂:一个工厂类根据参数创建所有产品(违背开闭原则)。
    • 工厂方法:每个产品对应一个工厂子类(符合开闭原则)。
  • 应用场景LoggerFactory.getLogger()、Spring 的 BeanFactory、JDBC 驱动加载。

4.适配器模式 (Adapter Pattern)

核心思想:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。

  • 它是“补救模式”。当你无法修改老代码或第三方库,但新接口规范又不一致时,适配器是最好的胶水。
  • 实现方式:通常使用组合(对象适配器)优于继承(类适配器)。
// 目标接口
public interface TypeC { void charge(); }

// 已有类(不兼容)
public class MicroUSB { void power() { System.out.println("MicroUSB供电"); } }

// 适配器
public class TypeCAdapter implements TypeC {
    private MicroUSB microUSB = new MicroUSB();
    @Override
    public void charge() { microUSB.power(); } // 转换调用
}

应用场景: 常见于 DTO / VO 转换、第三方 SDK 封装、接口版本兼容(v1 → v2)

posted @ 2026-01-28 12:06  水星逃逸  阅读(4)  评论(0)    收藏  举报