设计模式中的行为模式

发布于:2025-08-08 ⋅ 阅读:(32) ⋅ 点赞:(0)

行为型设计模式主要关注对象间的职责分配和算法抽象,以下是11种经典行为模式及其典型应用场景的详细解析:

1. 责任链模式(Chain of Responsibility)
核心思想:将请求沿处理链传递,直到有对象处理它

应用场景:

多级审批系统(如费用报销流程)

事件冒泡机制(浏览器DOM事件)

日志过滤器链(Log4j的Appender过滤)

典型案例:

public interface Handler {
  void setNext(Handler h);
  boolean handle(Request req);
}
// 构建链:spamHandler -> fanHandler -> complaintHandler

2. 命令模式(Command)
核心思想:将请求封装为独立对象,支持撤销/重做

应用场景:

图形编辑器撤销栈(Photoshop历史记录)

智能家居遥控器(同一按钮绑定不同设备)

事务型系统(数据库回滚操作)

实现要点:

class Command:
  def execute(self): pass
  def undo(self): pass

class LightOnCommand(Command):
  def __init__(self, light):
    self._light = light
  def execute(self):
    self._light.turn_on()

3. 解释器模式(Interpreter)
核心思想:定义语言的文法表示,并解释执行

应用场景:

正则表达式引擎

SQL语法解析(MySQL的WHERE子句处理)

金融规则引

4. 迭代器模式(Iterator)

  • 核心思想:提供统一的集合遍历接口

  • 应用场景

    • 数据库查询结果集遍历(JDBC ResultSet)

    • 树形结构遍历(文件系统目录导航)

    • 自定义集合类(C++ STL迭代器实现)

  • 现代演进

// ES6迭代器协议
const myIterable = {
  [Symbol.iterator]() {
    let step = 0;
    return {
      next() {
        return step <= 3 ? 
          {value: step++, done: false} : 
          {done: true};
      }
    };
  }
};

5. 中介者模式(Mediator)
核心思想:通过中介对象集中管理对象间交互

应用场景:

航空管制系统(协调多架飞机起降)

GUI组件通信(Qt的信号槽机制)

微服务编排(Kubernetes Pod调度)

优势对比:

直接通信    中介者模式
N*(N-1)连接复杂度    线性复杂度
对象强耦合    对象仅依赖中介
6. 备忘录模式(Memento)
核心思想:捕获对象内部状态并在需要时恢复

应用场景:

游戏存档系统(保存角色状态)

文本编辑器撤销操作(VSCode的CTRL+Z)

虚拟机快照(VMware snapshot)

实现注意:

// 严格封装备忘录
class Originator {
  private string _state;
  public Memento Save() => new Memento(_state);
  internal void Restore(Memento m) => _state = m.GetState();
}

// 备忘录类不公开构造函数
public sealed class Memento {
  private readonly string _state;
  internal Memento(string s) => _state = s;
  internal string GetState() => _state;
}

7. 观察者模式(Observer)
核心思想:定义对象间的一对多依赖关系

应用场景:

股票价格变动通知(Bloomberg终端)

React/Vue响应式数据绑定

传感器数据监控(IoT设备群)

现代实现:

// RxJS观察者模式变体
const stockTicker$ = new Subject<number>();
stockTicker$.subscribe(price => {
  console.log(`当前股价: ${price}`);
});
stockTicker$.next(156.78);

8. 状态模式(State)
核心思想:将对象行为委托给状态对象

应用场景:

电梯控制系统(运行/停止/维护状态)

TCP连接状态机(SYN_SENT/ESTABLISHED)

游戏AI角色行为(巡逻/追击/逃跑)

模式优化:

// 使用状态机生成器避免条件分支
type State interface {
  Handle(ctx *Context)
}

type Context struct {
  state State
}
func (c *Context) Request() {
  c.state.Handle(c)
}

9. 策略模式(Strategy)
核心思想:定义算法族并使其可互换

应用场景:

支付方式选择(支付宝/微信/信用卡)

导航路径计算(最短路径/最少收费)

数据压缩算法(ZIP/LZ77/Snappy)

Lambda演进:

// 传统实现
interface SortStrategy {
  void sort(List<?> items);
}

// Java8+函数式表达
Collections.sort(list, (a,b) -> b.compareTo(a));

10. 模板方法模式(Template Method)
核心思想:定义算法骨架,允许子步骤重写

应用场景:

自动化测试框架(setUp/test/tearDown)

银行交易流程(验证/执行/记录)

编译器设计(词法分析→语法分析→代码生成)

钩子方法:

class DatabaseTemplate:
  def connect(self): raise NotImplementedError
  def query(self): pass  # 默认实现
  def close(self): print("Default close")

  def execute(self):  # 模板方法
    self.connect()
    self.query()
    self.close()

11. 访问者模式(Visitor)
核心思想:将操作与对象结构分离

应用场景:

编译器AST遍历(类型检查/代码优化)

文档格式转换(Markdown→HTML/PDF)

医疗影像处理(CT/MRI不同分析算法)

双重分发:

class Element {
public:
  virtual void accept(Visitor& v) = 0;
};

class Visitor {
public:
  void visit(ElementA& e);
  void visit(ElementB& e);
};

行为模式选择矩阵
问题特征    推荐模式
需要撤销/重做操作    命令模式
对象状态决定行为    状态模式
跨组件通信复杂    中介者模式
多种算法灵活切换    策略模式
遍历异构集合    迭代器模式
解耦事件发布订阅    观察者模式
行为模式通过将行为抽象化和通信规范化,有效解决了面向对象设计中高频出现的职责分配问题。现代框架如Spring、React等大量融合这些模式思想,理解其本质比记忆实现更重要。


网站公告

今日签到

点亮在社区的每一天
去签到