行为型模式
作用
classDiagram
class Subject {
<>
}
class Observer {
<>
}
class ConcreteSubject {
}
class ConcreteObserver {
}
Subject <|-- ConcreteSubject
Observer <|-- ConcreteObserver
ConcreteSubject --> Observer : notifies
note for ConcreteSubject "观察者模式结构"
本质
关注对象间的通信和职责分配
模式分类
模式 | 用途 | 示例场景 |
---|---|---|
观察者 | 一对多依赖通知 | 事件处理系统 |
策略 | 算法封装互换 | 支付方式选择 |
责任链 | 请求传递链 | 审批流程 |
命令 | 封装请求为对象 | 任务队列 |
状态 | 对象状态改变行为 | 订单状态机 |
模板方法 | 算法骨架定义 | 工作流框架 |
访问者 | 分离算法与结构 | 编译器设计 |
示例
// 观察者模式
interface Observer {
void update(String message);
}
class User implements Observer {
private String name;
public User(String name) {
this.name = name;
}
public void update(String message) {
System.out.println(name + " 收到通知: " + message);
}
}
class NewsPublisher {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers(String news) {
for (Observer observer : observers) {
observer.update(news);
}
}
}
// 策略模式
interface PaymentStrategy {
void pay(int amount);
}
class CreditCardPayment 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);
}
}
注意事项
- 观察者模式要避免循环通知
- 策略模式适合算法经常变化的场景
- 责任链模式可以动态调整处理顺序
- 状态模式减少条件判断语句
- 命令模式支持撤销/重做操作
- 模板方法不宜过多重写步骤