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);
}
}
应用场景
| 模式 | 应用场景 |
|---|---|
| 单例 | 配置管理、数据库连接池 |
| 工厂 | 对象创建、依赖注入 |
| 策略 | 算法切换、支付方式 |
最佳实践
- 不要过度使用:只在真正需要时使用
- 理解意图:理解模式解决的问题
- 结合框架:Spring 等框架已内置模式
总结
设计模式是解决常见问题的最佳实践。掌握常用模式,可以写出更优雅、更可维护的代码。