职责链模式

1、预习

  模式学习情境入口:以职员的请假或者加薪为例,当一个职员请假时,一般是一个这样的顺序:首先由直管经理处理,如果处理不了则上传到总监处,如果再处理不了上传到总经理处,由最高级的管理者处理。将这样一个处理的链称之为“职责链”。

2、定义

  职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

  这种模式下,客户端不需要知道这个链当中的哪一个对象会最终处理请求,系统就可以在不影响客户端的情况下动态的重组和分配职责链的上下级。最终的处理过程会变成这样:客户端只需要把请求提出给直属上司(只需要提交到职责链上,而不需要区分具体应该提交给谁),最终就会得到处理结果。

  职责链模式中最重要的两点:①你需要事先给每个具体管理者设置它的上司类,也就是为他指定后继者;②你需要在每个具体管理者处理请求时做出判断,该类是可以处理请求,还是需要继续传递请求。

3、具体编写实现过程

  ①声明职责链上的所有成员,每个成员可以单独于职责链存在

  ②建立职责链:将成员按照规则放入职责链上;

  ③向职责链递交请求:每次都是将请求递交给最低职责的那个成员;然后由职责链自身判断具体需要交给谁处理

  注:在具体实现过程中,职责链接口在声明时需要三个对象:继任者(上司)、设置继任者的方法、处理请求的方法。

4、总结

  职责链中的关键是:当客户提交一个请求时,请求是沿着链传递直至一个具体的责任者处理了该请求。而且接收者(处理者)和发送者都不需要知道相互之间的具体信息,且链中的对象也不需要知道职责链的具体结构。因此这样的话职责链就可以简化对象的相互连接,职责链仅需要保持一个指向其后继者的引用,而不需要知道整个职责链上所有接收者的引用,这样就大大降低耦合度。同时,也可以随时的修改一个职责链,增加了给对象指派职责的灵活性。

  同时,职责链上的每个成员需要在内部判断一个请求是自己可以处理还是需要提交给继任者(上司)继续处理。

  注:但是在职责链应用时一定要注意,一个请求极有可能到了职责链的末端都得不到处理,或者因为没有正确配置而得不到处理。因此,在设置职责链时一定要考虑到请求的终极处理!

posted @ 2016-12-13 21:59  花火灬流年  阅读(176)  评论(0编辑  收藏  举报