设计模式之责任链模式

设计模式之责任链模式       

     责任链模式是一种对象的行为模式,在责任链模式里,很多对象由每一个对象对其下家的引用而来连接起来形成一个链,请求在这个链上传递,直到链上的某一个对象决定处理此请求,发出这个请求的客户端不知道链上的哪一个对象最终处理此请求,这使得系统可以在不影响客户端的情况下动态的重新组织和分配责任;击鼓传花也可以作为责任链模式的应用;

责任链模式的结构

责任链模式的角色:

抽象处理者角色:定义一个处理请求的接口,如果需要,接口可以定义出一个方法以设定和返回对下家的引用,通常是一个Java抽象类或者Java接口

具体处理者角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。

纯雨不纯的责任链模式:

一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给下家,不允许出现处理者对象在承担了一部分责任又把责任向下传的情况;

在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接受,在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接受;

责任链模式的优缺点:

1.请求者和接收者松散耦合

在职责链模式里面,请求者并不知道接收者是谁,也不知道具体如何处理,请求者只是负责向职责链发出请求就可以了,而每个职责对象也不用管请求或者是其他的指责对象,只负责处理自己的部分就行,其他的交由其他的职责对象去处理,也就是说,请求者和接收者是完全解耦的;

2.动态组合指责

职责链模式会把功能分散到单独的职责对象里面,然后再使用的时候,可以动态组合职责形成职责链,从而可以灵活的给对象分配指责,也可以灵活地实现和改变对象的职责;

3.产生很多细粒度对象

职责链模式会把功能分散到单独的职责对象里面,每一个对象只处理一个方面的功能,要把整个业务处理完,需要大量的指责对象组合,这会产生大量的细粒度职责对象;

4.不一定能被处理

职责链模式的每个职责对象只负责自己处理的那一部分,因此可能会出现某个请求,把整个链传递完了,都没有职责对象处理他;

职责链模式的本质:

分离职责,动态组合

Tomcat里面的filter就是用了责任链模式;其实Tomcat里面的容器设置也是用了责任链模式

ApplicationFilterChain类所扮演的就是抽象处理者角色,而具体处理者角色由各个Filter扮演;各个过滤器之间用了递归的思想;

文章参考自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html

                    http://www.cnblogs.com/exceptioneye

原文地址:https://www.cnblogs.com/yjxs/p/9773425.html