本文介绍了GoF中的责任链模式。
模式推演
GUI中的点击响应:
例如iOS系统,用户点击了屏幕,iOS将点击事件传递给App的窗口UIWindow,UIWindow再将其分发给当前的ViewController,ViewController再将其分发给RootView,RootView再继续一层层分发下去,当有一个View,例如Button,响应了这个事件时,则不再分发。
下面的邮件处理系统也是,一层层分发:
定义
责任链模式(Chain of Reponsibility Pattern):让一个以上的对象有机会能够处理某个请求。
类图:
用途:
- 经常被使用在窗口系统中,处理鼠标和键盘之类的事件。
优点:
- 将请求的发送者和接受者解耦;
- 可以简化你的对象,因为它不需要知道链的结构;
- 改变链内的成员或调用他们的次序,允许你动态地新增或者删除责任。
缺点:
- 并不保证请求一定会被执行,如果没有任何对象处理它的话,它可能或落到链尾端之外;
- 可能不容易观察运行时的特征,有碍于除错。