浅说责任链,装饰者

简介:
定义,类图都不再赘述。这里只记录一点我自己的理解。

关于责任链
责任链可以有内置和外置两种。内置责任链是在链中的各个环自己确认下一个处理器;外置责任链是在单独维护一条链,链条中的各个环节实际是不知道自己的下家的。内置的链实际是一个栈。外置的才是真正的链。
对外置的责任链,整个链条不一定要处理完,并且可以方便的根据返回值很方便的中断。对于内置的责任链,需要逐层的退栈和判断,会比较麻烦,因此一般会尽量让整个链条都执行完。
一般来说,责任链是多个处理器从同一维度来共同完成一项工作。比如某本模式书上举的中国古代女子从父、从夫、从子的责任链例子,父、夫、子都是同一个处理维度。

关于装饰者
装饰者更像是内置链条的责任链。但就我所使用的情况看,责任链通常是有预定义的链条的;而装饰者更多的是根据实际情况自定义装饰、处理顺序的。
通常,装饰者的每一层装饰,都是从不同维度来完成一项工作。比如著名的java中的inputstream,什么文件输入流,有缓存的输入流,字节型输入流等,就是从不同的维度来处理输入流的。
===========
2012-04-16 更新
对外置的责任链来说,链的状态对链的每一环都是透明的;而内置的责任链,以及装饰者,链的每一环上至少要有指向下一环的引用,这就隐含了链的一种状态。

就扩展性来说,外置链应该是更强的。它可以根据用户的选择,在运行时装配必要的链,并且链的每一环均可以作为单例来复用。而装饰者虽然也可以在运行时装配,但由于每一环都存有链的一个状态,因此单例模式不太适用。内置链类似。如果所需的链式的服务是比较固定化的,可以使用后两者;如果变化较多,建议用第一种。




本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/814916,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 存储 算法
设计模式——责任链
OA系统的采购审批项目、职责链模式基本介绍、职责链模式解决 OA 系统采购审批项目
设计模式——责任链
|
7月前
|
设计模式 Java Spring
责任链设计模式详解
该内容主要介绍了如何使用Java实现责任链模式。
62 4
|
7月前
|
算法
犯错总结--工厂模式和策略模式傻傻没分清
犯错总结--工厂模式和策略模式傻傻没分清
63 0
犯错总结--工厂模式和策略模式傻傻没分清
|
设计模式 Java Maven
一个注解搞定责任链,学还是不学?
在繁琐的业务流程处理中,通常采用面向过程的设计方法将流程拆分成N个步骤,每个步骤执行独立的逻辑。但是这样剥离仍然不彻底,修改其中一个步骤仍然可能影响其他步骤。在这种场景下,有一种经典的设计模式-责任链模式,可以将这些子步骤封装成独立的handler,然后通过pipeline将其串联起来。
1029 173
一个注解搞定责任链,学还是不学?
|
设计模式 Java
Java设计模式七大原则-合成聚合复用原则
Java设计模式七大原则-合成聚合复用原则
99 0
|
设计模式 数据安全/隐私保护
这才是责任链模式的优雅使用方式
首先创建一个实体类Member。
110 0
|
设计模式 人工智能 前端开发
彻底说透简单工厂那些你没有关注过的细节
接下来看代码,还是以创建一门网络课程为例。假设有Java架构、大数据、人工智能等课程,已经形成了一个生态。我们可以定义一个课程标准ICourse接口。
69 0
|
设计模式 JavaScript 前端开发
从【if...else...】到【责任链】再到【composeAOP】,顺带把【传参】解决了~
从【if...else...】到【责任链】再到【composeAOP】,顺带把【传参】解决了~
从【if...else...】到【责任链】再到【composeAOP】,顺带把【传参】解决了~
|
SQL 设计模式 架构师
责任链、领域模型和事务的恩怨情仇
责任链、领域模型和事务的恩怨情仇
320 1
责任链、领域模型和事务的恩怨情仇
|
设计模式 前端开发 Java
浅析Java设计模式【5】——责任链
Java 设计模式,责任链
144 1
浅析Java设计模式【5】——责任链