版本:基于 Java 17 & Java 21 LTS
设计模式是前辈们针对特定问题的经典解决方案。掌握设计模式能让你的代码更优雅、可读且易于维护。本篇将通过 Java 现代语法,展示几种最常用的设计模式。
1. 单例模式 (Singleton)
单例模式确保一个类只有一个实例,并提供全局访问点。
现代写法:枚举单例 (推荐)
public enum ConfigManager {
INSTANCE;
private String apiUrl = "https://api.example.com";
public String getApiUrl() { return apiUrl; }
}
// 使用方式
String url = ConfigManager.INSTANCE.getApiUrl();优点:代码最简洁,天生线程安全,且能防止反射和反序列化破坏单例。
2. 工厂模式 (Factory)
隐藏对象创建逻辑,让代码依赖于接口而非具体实现。
public interface MessageService {
void send(String msg);
}
public class EmailService implements MessageService {
@Override public void send(String msg) { System.out.println("Email: " + msg); }
}
// 静态工厂方法 (现代 Java 常用)
public class ServiceFactory {
public static MessageService getService(String type) {
return switch (type) {
case "email" -> new EmailService();
default -> throw new IllegalArgumentException("Unknown type");
};
}
}3. 观察者模式 (Observer)
定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者都会收到通知。
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class EventCenter {
private final List<Consumer<String>> listeners = new ArrayList<>();
public void subscribe(Consumer<String> listener) { listeners.add(listener); }
public void notify(String event) { listeners.forEach(l -> l.accept(event)); }
}
// 使用
var center = new EventCenter();
center.subscribe(event -> System.out.println("收到事件: " + event));
center.notify("Java 21 发布了!");4. 装饰器模式 (Decorator)
动态地给对象增加功能,比继承更灵活。
public interface Coffee { double cost(); }
public class SimpleCoffee implements Coffee { @Override public double cost() { return 10; } }
public class MilkDecorator implements Coffee {
private final Coffee coffee;
public MilkDecorator(Coffee coffee) { this.coffee = coffee; }
@Override public double cost() { return coffee.cost() + 5; }
}
// 使用
Coffee myCoffee = new MilkDecorator(new SimpleCoffee());
System.out.println("总价: " + myCoffee.cost()); // 155. 策略模式 (Strategy)
定义一系列算法,并在运行时动态切换。
import java.util.function.BinaryOperator;
public class Calculator {
public int calculate(int a, int b, BinaryOperator<Integer> strategy) {
return strategy.apply(a, b);
}
}
// 使用
var calc = new Calculator();
int sum = calc.calculate(10, 5, (x, y) -> x + y);
int product = calc.calculate(10, 5, (x, y) -> x * y);本章小结
第十二篇我们学习了:
枚举单例的简洁与安全。
利用现代
switch表达式实现工厂模式。通过函数式编程简化观察者模式和策略模式。
装饰器模式带来的灵活性。
下一篇预告:现代框架实战 (Spring Boot 3 入门、Spring Cloud 架构思想)