首页 > 代码库 > 设计模式学习笔记(六:责任链模式)

设计模式学习笔记(六:责任链模式)

1.1概述

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

    责任链模式是使用多个对象处理用户请求的成熟模式,责任链模式的关键是将用户的请求分派给许多对象,这些对象被组织成一个责任链,即每个对象含有后继对象的引用,并要求责任链上的每个对象,如果能处理用户的请求,就做出处理,不再将用户的请求传递给责任链上的下一个对象;如果不能处理用户的请求,就必须将用户的请求传递给责任链上的下一个对象。

 

1.2模式的结构

责任链模式的结构总包括两种角色:

(1)处理者(Handler):处理者是一个接口,负责规定具体处理者处理用户请求的方法,以及具体处理者设置后继对象的方法。

(2)具体处理者(ConcreteHandler):具体处理者是实现处理者接口的类的实例。具体处理者通过调用处理者接口规定的方法处理用户的请求,即在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中,如果发现能处理用户的请求,就处理有关数据,否则就反馈无法处理的信息给用户,然后将用户的请求传递给自己的后继对象。

责任链模式结构的类图如下所示:

 技术分享

 

1.3责任链模式的优点

(1)责任链中的对象只和自己的后继是低耦合关系,和其他对象毫无关联,这使得编写处理者对象以及创建责任链变得非常容易。

(2)当在处理者中分配职责时,责任链给应用程序更多的灵活性。

(3)应用程序可以动态地增加、删除处理者或重新指派处理者的职责。

(4)
应用程序可以动态地增加、删除处理者或重新指派处理者的职责。

(5)应用程序可以动态地改变处理者之间的先后顺序。

(6)使用责任链的用户不必知道处理者的信息,用户不会知道到底是哪个对象处理了它的请求。

 

1.4适合使用责任链模式的情景

(1)有许多对象可以处理用户的请求,希望程序在运行期间自动确定处理用户的那个对象。

(2)希望用户不必明确指定接受者的情况下,向多个接受者的一个提交请求。

(3)程序希望动态制定可处理用户请求的对象集合。

设计模式学习笔记(六:责任链模式)