跳转至

行为模式

行为模式关注**对象之间的职责分配与通信**——如何让多个对象协作完成任务,同时降低它们之间的耦合。

GoF 定义了 11 种行为模式,每种模式都有独立的详细笔记:

模式 一句话总结 核心手段
模板方法(Template Method) 父类定义骨架,子类填充细节 继承 + 钩子方法
策略(Strategy) 定义一族算法,可互相替换 接口抽象算法,运行时注入
状态(State) 对象行为随状态变化而改变 将状态抽象为独立类
命令(Command) 把请求封装成对象 命令接口 + execute()
责任链(Chain of Responsibility) 请求沿处理者链传递 处理者持有 next 引用
观察者(Observer) 一变多通知 发布-订阅,维护监听者列表
中介者(Mediator) 集中管理对象间的通信 组件只与中介者通信
迭代器(Iterator) 顺序访问集合,不暴露内部结构 hasNext()/next() 接口
备忘录(Memento) 保存并恢复对象状态 快照对象 + 历史栈
访问者(Visitor) 在不修改类的前提下添加新操作 双分派,accept() + visit()
解释器(Interpreter) 定义语言的文法,并实现解释 语法规则→类,组合构成 AST

模式选型参考

graph TD
    A[需要协调对象行为] --> B{算法/策略\n需要切换?}
    B -- 是 --> C{骨架固定\n步骤可变?}
    C -- 是 --> D[模板方法]
    C -- 否 --> E[策略模式]
    B -- 否 --> F{行为随状态\n变化而变化?}
    F -- 是 --> G[状态模式]
    F -- 否 --> H{一对多\n变化通知?}
    H -- 是 --> I[观察者模式]
    H -- 否 --> J{请求需要\n链式传递?}
    J -- 是 --> K[责任链模式]
    J -- 否 --> L{需要封装操作\n支持撤销/队列?}
    L -- 是 --> M[命令模式]
    L -- 否 --> N{顺序访问\n集合元素?}
    N -- 是 --> O[迭代器模式]
    N -- 否 --> P{需要保存/\n恢复历史状态?}
    P -- 是 --> Q[备忘录模式]
    P -- 否 --> R{多对象通信\n网状复杂?}
    R -- 是 --> S[中介者模式]
    R -- 否 --> T{不改类\n新增操作?}
    T -- 是 --> U[访问者模式]
    T -- 否 --> V[解释器模式]