Posted by & filed under Uncategorized.

About chen xiang

Xiang Chen has written 52 post in this blog.

概述

责任链(Chain of Responsibility)模式:

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

情景模拟

1

 

 

简单描述

一个靓仔(高富帅或者低矮搓)为了追到心爱的女孩,历经磨难,最终到达结果!

预定两个磨难:女孩的闺蜜要求靓仔开车兜兜风;女孩的妈妈要求你有钱,有房。

构建原型

Me

 

 

LoverFriends

 

 

 

 

LoverParents

MyLover

 

 

第一次开始启动磨难历程

 

发现问题

  • 代码不能因需求无限的变化。(当出现爱人的姑姑给靓仔再添加一个磨难考验,他的弟弟妹妹再给靓仔添加磨难……..)
  • 考验(Test)存在同样的形式。

 

解决问题

  • 将这种考验变成接口!
  • 将(Test)形成数组操作

 

提取接口Test

 

 

各个Model都实现Test。下面贴出LoverParents,其他同。

集合化

 

发现问题

  • 好像过多的磨难,需要组成一个集合类,方便增删改查。

 

解决问题

  • 将考验形成集合!
  • 集合本身也是一个大考验(Test),也可以实现Test接口

 

 

  • 将考验形成单向一个链条,责任链!多么悲惨的事实!

     
  • 主程序

 

 

 

得到的只是另一个历程的开始

好开心,心爱的姑娘答应了我,但是讨厌的事情又来了………

情景模拟

心爱的姑娘答应了结婚,但是要求给他买个钻戒。妈妈要求彩礼,姐妹们要带她们去马尔代夫。2

 

分析问题

好像又是很多的考验(Test),是不是继续添加Test对象?Test 10万彩礼应该也是在LoverParents中的Test啊?到马尔代夫也是在LoverFriends中啊?

分析现象:

3

 

考验形成了一个环状。

我们需要集合去控制这个环的流向。

当第一个考验完成了验证之后,需要通知集合,让让集合向下一个考验流转。

4

 

解决问题

更改接口

 

实现该接口的Model类,如LoverParent

 

控制流转的集合类

 

主程序

 

看看现在的模型关系

5

真实环境中的运用

Structs2  intercepters

Servlet Filter

Asp.net handler

Tomcat中HttpRequest,HttpResponse

可以看看的文章:

《JAVA与模式》之责任链模式

下载源码:ChainOfResponsibility

 

One Response to “浅谈责任链”

Leave a Reply

  • (will not be published)