行为型模式
作用
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);
    }
}
注意事项
- 观察者模式要避免循环通知
 - 策略模式适合算法经常变化的场景
 - 责任链模式可以动态调整处理顺序
 - 状态模式减少条件判断语句
 - 命令模式支持撤销/重做操作
 - 模板方法不宜过多重写步骤