观察者模式:消息订阅的优雅实现
观察者模式建立对象间一对多的依赖关系,当一个对象状态改变时,所有依赖者都会自动收到通知。以下实现新闻发布订阅场景:
// 主题接口
interface NewsPublisher {
void addSubscriber(Subscriber subscriber);
void removeSubscriber(Subscriber subscriber);
void notifySubscribers(String news);
}
// 具体主题
class BreakingNewsPublisher implements NewsPublisher {
private List<Subscriber> subscribers = new ArrayList<>();
public void addSubscriber(Subscriber subscriber) {
subscribers.add(subscriber);
}
public void notifySubscribers(String news) {
subscribers.forEach(sub -> sub.update(news));
}
}
// 观察者
interface Subscriber {
void update(String news);
}
class EmailSubscriber implements Subscriber {
public void update(String news) {
System.out.println("电子邮件收到突发新闻: " + news);
}
}
策略模式:灵活算法的自由切换
策略模式定义算法族,分别封装起来,使它们可以互相替换,让算法变化独立于使用者:
interface PaymentStrategy {
void pay(int amount);
}
class CreditCardPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("信用卡支付: " + amount + "元");
}
}
class WeChatPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("微信支付: " + amount + "元");
}
}
class PaymentContext {
private PaymentStrategy strategy;
public void setStrategy(PaymentStrategy strategy) {
this.strategy = strategy;
}
public void executePayment(int amount) {
strategy.pay(amount);
}
}
// 使用示例
PaymentContext context = new PaymentContext();
context.setStrategy(new CreditCardPayment());
context.executePayment(100);
责任链模式:请求处理的流水线
责任链模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求:
abstract class ApprovalHandler {
protected ApprovalHandler nextHandler;
public void setNextHandler(ApprovalHandler handler) {
this.nextHandler = handler;
}
public abstract void processRequest(LeaveRequest request);
}
class Manager extends ApprovalHandler {
public void processRequest(LeaveRequest request) {
if (request.getDays() <= 5) {
System.out.println("经理批准请假" + request.getDays() + "天");
} else if (nextHandler != null) {
nextHandler.processRequest(request);
}
}
}
class Director extends ApprovalHandler {
public void processRequest(LeaveRequest request) {
if (request.getDays() <= 10) {
System.out.println("总监批准请假" + request.getDays() + "天");
} else {
System.out.println("请假申请被拒绝");
}
}
}
模式对比与选型指南
|
模式名称 |
适用场景 |
优势 |
劣势 |
|
观察者模式 |
事件驱动系统、消息订阅 |
解耦主题与观察者 |
可能导致意外更新 |
|
策略模式 |
算法频繁切换场景 |
避免多重条件语句 |
客户端必须了解策略差异 |
|
责任链模式 |
多级处理流程 |
降低耦合度 |
请求可能未被处理 |
行为型模式为我们提供了对象间交互的优雅解决方案,合理运用这些模式能够显著提升代码的可维护性和扩展性。根据实际场景选择合适的模式,是每一位高级Java开发者必备的架构设计能力。

被折叠的 条评论
为什么被折叠?



