随笔-95  评论-31  文章-10  trackbacks-0
先上图:
接着几乎就明白了:一些"插件"要么让你继承一个抽象类要么让你实现一个接口要么让你注解一下,比如一个server服务器接收到客户端发来的消息,那么可以用两种方式增加拦截处理机制:1,观察者 2,责任链
如果采用观察者:
定义一个拦截器抽象类或者接口(主题),增加自定义处理(观察者),然后一般就是addxxxListener或者就是addxxxIntercepter,消息业务处理最终只有一个业务组件类来处理,但是可以定义多个观察者。
对这条消息处理,也就是说,要把主题传递给观察者,观察者拿到进行一系列处理,观察者用队列,栈或者其它什么数据结构,最后一个是真正的业务处理,那么在此之前就可以做很多操作了,比如把消息存储下来,或者把消息的一部分取出来等等。
如果采用责任链:
一般就是不纯的责任链模式,这种方式比如servlet过滤器就采用的这种方式,还有struts2的拦截器,定义一系列过滤器链,这个链又可以采用不同数据结构队列 栈 树等等,可以把收到的消息进行一些额外处理,然后再传递给下一个链对象,最终由用户定义的业务组件来处理。而这些链用户可以自定义,就达到了这种效果。
以上两种方式唯一的不同点在于:
采用观察者模式,那么在中间传递的是主题,这个主题无法动态的改变,只能做额外处理,但传递的还是原本的主题对象。
采用责任链模式,那么在中间传递的过程中,可以对主题对象做一些改变,在传递给下一个链对象。
责任链模式不适应于大规模的系统设计,一般如果采用观察者模式,就要对这种方式进行一些增强,比如一个观察者处理完毕后,包装这个主题可用装饰者模式增强然后返回,让下一个观察者使用这个主题,对多个观察者还可以使用组合模式,可以把多个观察者改为树结构,采用责任链模式也可以采用这种方法。
代理模式也能实现这种拦截,也就是aop方式
随后写几个例子,openfire插件以及针对于spring mvc的一些玩法
posted on 2013-09-26 16:34 朔望魔刃 阅读(244) 评论(0)  编辑  收藏 所属分类: 设计模式&&数据结构

只有注册用户登录后才能发表评论。


网站导航: