责任链定义
当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式(Chain of Responsibility Pattern)
场景
自糖果机发布后,糖果公司收到的电子邮件数量已经超出了他们所能处理的范围。收到的电子邮件主要有四类:
- Fans寄来的信,他们喜欢新推出的游戏
- 父母寄来的信,抱怨他们沉溺于这个游戏
- 店家寄来的信,希望能够在某些地方也摆设糖果机
- 垃圾邮件
- Fans的邮件送到CEO
- 抱怨邮件给法律部门
- 新机器请求邮件交给业务部门
- 垃圾邮件删除
需求
设计程序:使用这个过滤程序处理收到的邮件
责任链模式
通过责任链模式,可以为某个请求创建一个对象链。每个对象依序检查此请求,并对其进行处理,或者将它传给链中的下一个对象。
当收到电子邮件的时候,他会被送进第一个处理器,也就是SpamHandler。如果SpamHandler无法处理,就将它传给FanHandler,依次类推…
责任链的优点
- 将请求的发送者和接受者解耦
- 可以简化你的对象,因为它不需要知道链的结构
- 通过改变链内的成员或调动它们的次序,允许你动态地新增或者删除责任
责任链的用途和缺点
- 经常被使用在窗口系统中,处理鼠标和键盘之类的事件
- 并不保证请求一定会被执行;如果没有任何对象处理它的话,它可能会落到链尾端之外
- 可能不容易观察运行时的特征,有碍于除错