快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
!"); } else { System.out.println("Jia Mu passed!"); next(i); } } }

代码清单7、代表贾母的JiaMu类的源代码。

class JiaShe extends Player { public JiaShe(Player aSuccessor) { this.setSuccessor(aSuccessor); } public void handle(int i) { if( i == 2 ) { System.out.println("Jia She gotta drink!"); } else { System.out.println("Jia She passed!"); next(i); } } }

代码清单8、代表贾赦的JiaShe类的源代码。

class JiaZheng extends Player { public JiaZheng(Player aSuccessor) { this.setSuccessor(aSuccessor); } public void handle(int i) { if( i == 3 ) { System.out.println("Jia Zheng gotta drink!"); } else { System.out.println("Jia Zheng passed!"); next(i); } } }

代码清单9、代表贾政的JiaZheng类的源代码。

class JiaBaoYu extends Player { public JiaBaoYu(Player aSuccessor) { this.setSuccessor(aSuccessor); } public void handle(int i) { if( i == 4 ) { System.out.println("Jia Bao Yu gotta drink!"); } else { System.out.println("Jia Bao Yu passed!"); next(i); } } }

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

时间:2009-12-15

代码清单10、代表贾宝玉的JiaBaoYu类的源代码。

class JiaHuan extends Player { public JiaHuan(Player aSuccessor) { this.setSuccessor(aSuccessor); } public void handle(int i) { if( i == 5 ) { System.out.println("Jia Huan gotta drink!"); } else { System.out.println("Jia Huan passed!"); next(i); } } }

代码清单11、代表贾环的JiaHuan类的源代码。

可以看出,DrumBeater设定了责任链的成员和他们的顺序:责任链由贾母开始到贾环,周而复始。JiaMu类、JiaShe类、JiaZheng类、JiaBaoYu类与JiaHuan类均是抽象传花者Player类的子类。

本节所实现的DrumBeater类在把请求传给贾母时,实际上指定了由4号传花者处理酒令。虽然DrumBeater并不知道哪一个传花者类持有号码4,但是这个号码在本系统一开始就写死的。这当然并不符合击鼓传花游戏的精神,因为这个游戏实际上要求有两个同时进行的过程:击鼓过程和传花过程。击鼓应当是定时停止的,当击鼓停止时,执行酒令者就确定了。但是本节这样做可以使问题得到简化并将读者的精力放在责任链模式上,而不是两个过程的处理上。

下一章会给出一个多线程的系统,更加逼真地模拟击鼓传花系统。

在什么情况下使用责任链模式

在下面的情况下使用责任链模式:

第一、系统已经有一个由处理者对象组成的链。这个链可能由复合模式给出,

第一、当有多于一个的处理者对象会处理一个请求,而且在事先并不知道到底由哪一个处理者对象处理一个请求。这个处理者对象是动态确定的。

第二、当系统想发出一个请求给多个处理者对象中的某一个,但是不明显指定是哪一个处理者对象会处理此请求。

第三、当处理一个请求的处理者对象集合需要动态地指定时。

使用责任链模式的长处和短处

责任链模式减低了发出命令的对象和处理命令的对象之间的耦合,它允许多与一个的处理者对象根据自己的逻辑来决定哪一个处理者最终处理这个命令。换言之,发出命令的对象只是把命令传给链结构的起始者,而不需要知道到底是链上的哪一个节点处理了这个命令。

显然,这意味着在处理命令上,允许系统有更多的灵活性。哪一个对象最终处理一个命令可以因为由那些对象参加责任链、以及这些对象在责任链上的位置不同而有所不同。

责任链模式的实现

链结构的由来

值得指出的是,责任链模式并不创建出责任链。责任链的创建必须有系统的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号