首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

责任链设计模式

场景需求:有一串字符串,需要将其中的个别字符做replace操作。需求经常改变,某一个时刻需要做这种替换操作,下次需要增加另一种操作,此时如果把替换方法硬编码到一个类中,则后期难以维护。此时需要利用接口和责任链的知识。

码示例:

1:定义一个过滤器接口

2:两个不同实现类(不同的字符串处理需求)

替换姓名的实现类

替换性别的实现类

调用者:

BBBAFFFF女女女

StrResolver

责任链的核心在在于:

1:strResolver类持有一个list属性,并且,往list添加元素的时候执行addFilter 方法的时候,返回this, 把当前对象返回给调用者,那么当前对象就可以继续执行addFilter方法,给自己的属性list中添加元素(当然在spring通过注解的方式装在到集合中),将所有需要执行的filter对象都装到list中去,从而实现链式调用addFilter方法。2:将所有过滤对象,装到一个list中,循环调用doFilter方法,从而实现需求。3: 提供了一个借口,需求新增的时候,只用实现Filter接口就可以了,实现了水平扩展。

责任链模式加强版上面的实现的过滤链可以用下图a)表示出来,整个过程只对msg过滤了一次。而JavaWeb中的过滤器链和Struts2中的拦截器栈执行的过程可以形象的表示为图b)。

下面用程序模拟JavaWeb中的过滤器,实现类似于对Request和Response的过滤。主要涉及的类如下所示:

代码示例

结果

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180421G1G8OS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券