跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

行为型模式

作用

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);
    }
}

注意事项

  • 观察者模式要避免循环通知
  • 策略模式适合算法经常变化的场景
  • 责任链模式可以动态调整处理顺序
  • 状态模式减少条件判断语句
  • 命令模式支持撤销/重做操作
  • 模板方法不宜过多重写步骤