Java 设计模式实战:单例、工厂、策略模式

介绍 Java 中常用的设计模式,包括单例、工厂、策略模式的实现和应用场景。

Java 后端 2026-06-18 12 分钟

Java 设计模式实战:单例、工厂、策略模式

设计模式是解决常见问题的最佳实践。本文介绍三种常用设计模式。

单例模式

确保一个类只有一个实例。

饿汉式

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

懒汉式(双重检查锁)

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

枚举方式(推荐)

public enum Singleton {
    INSTANCE;
    
    public void doSomething() {
        // ...
    }
}

工厂模式

简单工厂

public class ShapeFactory {
    public static Shape create(String type) {
        switch (type) {
            case "circle": return new Circle();
            case "rectangle": return new Rectangle();
            default: throw new IllegalArgumentException("未知类型");
        }
    }
}

工厂方法

public interface ShapeFactory {
    Shape create();
}

public class CircleFactory implements ShapeFactory {
    @Override
    public Shape create() {
        return new Circle();
    }
}

抽象工厂

public interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

public class WindowsFactory implements GUIFactory {
    @Override
    public Button createButton() { return new WindowsButton(); }
    @Override
    public Checkbox createCheckbox() { return new WindowsCheckbox(); }
}

策略模式

定义一系列算法,使它们可以互换。

// 策略接口
public interface SortStrategy {
    void sort(int[] array);
}

// 具体策略
public class BubbleSort implements SortStrategy {
    @Override
    public void sort(int[] array) {
        // 冒泡排序实现
    }
}

public class QuickSort implements SortStrategy {
    @Override
    public void sort(int[] array) {
        // 快速排序实现
    }
}

// 上下文
public class Sorter {
    private SortStrategy strategy;
    
    public Sorter(SortStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void sort(int[] array) {
        strategy.sort(array);
    }
}

应用场景

模式 应用场景
单例 配置管理、数据库连接池
工厂 对象创建、依赖注入
策略 算法切换、支付方式

最佳实践

  1. 不要过度使用:只在真正需要时使用
  2. 理解意图:理解模式解决的问题
  3. 结合框架:Spring 等框架已内置模式

总结

设计模式是解决常见问题的最佳实践。掌握常用模式,可以写出更优雅、更可维护的代码。

📚 相关文章