Java设计模式:责任链

发表于:2012-10-09 09:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:emoven    来源:51Testing软件测试网采编

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

  在处理用户的请求时可能要根据不同的情况对请求添加不同的处理逻辑,在这时候就可以利用责任链进行设计。当需要添加一个处理逻辑时可以很方便的添加一个处理的节点。

  现在我们的需求是处理用户的请求,将用户提交的字符串信息进行层层处理,同时在处理完成之后返回结果时,也要对返回的字符串进行层层处理,而处理返回的情况时其处理的顺序和先前是正好相反的顺序。

  首先建立用户的请求和接收对象Request和Response:

  1. packagecom.lcq.filter;
  2. publicclassRequest {
  3. String requestStr;
  4. publicString getRequestStr() {
  5. returnrequestStr;
  6. }
  7. publicvoidsetRequestStr(String requestStr) {
  8. this.requestStr = requestStr;
  9. }
  10. }
  1. packagecom.lcq.filter;
  2. publicclassResponse {
  3. String responseStr;
  4. publicString getResponseStr() {
  5. returnresponseStr;
  6. }
  7. publicvoidsetResponseStr(String responseStr) {
  8. this.responseStr = responseStr;
  9. }
  10. }

  我们将处理用户信息的逻辑抽象成为一个个的过滤器,进一步抽象出过滤器接口Filter:

  1. packagecom.lcq.filter; 
  2. publicinterfaceFilter { 
  3.    publicvoiddoFilter(Request request, Response response,FilterChain chain); 
  4. }

  注意在Filte接口中doFilter方法参数中有FilterChain的一个变量,我们再建立FilterChain类:

  1. packagecom.lcq.filter; 
  2. importjava.util.ArrayList; 
  3. importjava.util.List; 
  4. publicclassFilterChainimplementsFilter { 
  5.     List<Filter> filters =newArrayList<Filter>(); 
  6.    intindex =0
  7.    publicFilterChain addFilter(Filter f) { 
  8.        this.filters.add(f); 
  9.        returnthis
  10.     } 
  11.    @Override
  12.    publicvoiddoFilter(Request request, Response response, FilterChain chain) { 
  13.        if(index == filters.size()) 
  14.            return
  15.         Filter f = filters.get(index); 
  16.         index++; 
  17.         f.doFilter(request, response, chain); 
  18.     } 
  19. }

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号