快速业务通道

Java模式开发之责任链模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
mand Pattern) 责任链模式使一个特定的请求接收对象对请求或命令的执行变得不确定。而命令模式使得一个特定的对象对一个命令的执行变得明显和确定。

模版方法模式(Template Method) 当组成责任链的处理者对象是按照复合模式组成一个较大的结构的责成部分的话,模版方法模式经常用来组织单个的对象的行为。

问答题

第一题、在称为“拱猪”的纸牌游戏中,四个参加者中由“猪”牌的,可以选择一个时机放出这张“猪”牌。“猪”牌放出后,四个人中的一个会不可避免地拿到这张“猪”牌。

请使用责任链模式说明这一游戏,并给出UML结构图。

第二题、《墨子.迎敌祠》里描守城军队的结构:“城上步一甲、一戟,其赞三人。五步有伍长,十步有什长,百步有佰长,旁有大帅,中有大将,皆有司吏卒长。”

一个兵勇需要上级批准以便执行一项任务,他要向伍长请求批准。伍长如果有足够的权限,便会批准或驳回请求;如果他没有足够的权限,便会向上级,即什长转达这个请求。什长便会重复同样的过程,直到大将那里。一个请求最终会被批准或驳回,然后就会象下传,直到传回到发出请求的士兵手里。

有些请求会很快返回,有些则要经过较长的过程。请求到底由谁批准,事前并不知道。请求的处理者并不是固定的,有些军官会晋升,转业,或从别的单位转过来,等等。

请使用责任链模式解释这个核准请求的结构。

(本例子受到文献[ALPERT98]里“Chain of Responsibility”一节所给出的一个例子的启发。)

第三题、王羲之在《兰亭序》中写道:“有清流激湍,映带左右,引以为流觞曲水,列坐其次。”讲的是大伙列坐水畔,随水流放下带羽毛的酒杯饮酒。远道而来的酒杯流到谁的面前,谁就取而饮之。

在这个活动中,参加者做成一排,面对着一条弯曲的小溪。侍者把酒杯盛满酒,让酒杯沿着小溪向下漂流。酒杯漂到一个参加者面前的时候,他可以选择取酒饮之,也可以选择让酒杯漂向下家。

假设每一杯酒最终都会被参加者中之一喝掉,那么这个游戏是不是纯的责任链模式?

问答题答案

第一题答案、这是一个纯的责任链模式。

首先,在“猪”牌放出之后,每个人都只能要么躲过“猪”牌,要么吃住“猪”牌。“猪”牌便是责任链模式中的请求,四个人便是四个处理者对象,组成责任链。

每一个参加者的行为不仅仅取决于他手中的牌,而且取决于他是否想得“猪”牌。一个想收全红的人,可能会权力揽“猪”牌,一个不想收全红的人,一般不想收“猪”牌,除非他想阻止别人收“猪”牌。因为一旦有人收全红,另外三个人就会复出较大的代价,因此阻止别人收全红的动机,会促使一个参与者主动收“猪”牌。有的时候,放出“猪”牌的人也会想要得“猪”牌而得不到,有的时候放出“猪”牌的人想要害人但却害了自己。

这就是说,到底是四个人中的哪一个人得到“猪”牌是完全动态决定的。

Java模式开发之责任链模式(10)

时间:2009-12-15

系统的UML结构图如下:

Java模式开发之责任链模式 - 编程入门网

图18、纸牌游戏“拱猪”的UML类图。

由于玩牌的时候,可能有四人位置的任意调换,或者有候补者在旁等待,一旦在任的玩家被淘汰,便可上任。这样四个人组成的牌局是动态变化的。同时因为谁会拿到“猪”牌在每一局均会不同,因此谁会放出“猪”牌也是动态的。

因此,责任链的组成和顺序变不是一成不变的,而是动态的和变化的。

第二题答案、墨子的守城部队的等级结构可以用下面的对象图表示。

Java模式开发之责任链模式 - 编程入门网

图17、对象图,显示墨子的守城部队。

显然,这是一个纯的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号