Java设计模式之责任链模式简介

时间:2021-05-20

对于使用过宏的朋友应该知道,利用宏可以实现一个键绑定多个技能。例如如果排在前面的技能有CD,则跳过此技能,执行之后的技能。记得曾经玩DK,打怪的时候,就是用一个键,一直按就行了。在servlet里的doGet和doPost方法,我们一般都把doGet请求发动到doPost里来处理,这也是一种责任链的模式。

这里,有个宏,绑定了“冰血冷脉”和“寒冰箭”两个技能,程序实例如下所示:

package responsibility;/** * DOC 技能接口,要绑定的技能都要实现这个接口 * */public interface ISkill { public void castSkill();}package responsibility;import java.util.ArrayList;import java.util.List;/** * DOC 宏类,用来把多个技能绑在一起,实现一键施放 * */public class Macro { /** * DOC 多个技能绑在一起的集合 */ public List<ISkill> skills = new ArrayList<ISkill>(); /** * * DOC 按照绑定顺序施放技能. */ public void castSkill() { for (int i = 0; i < skills.size(); i++) { skills.get(i).castSkill(); } } /** * DOC 绑定技能. * * @param skill */ public void bindSkill(ISkill skill) { skills.add(skill); }}package responsibility;/** * DOC 寒冰箭技能,无冷却时间 * */public class IceArrow implements ISkill { @Override public void castSkill() { System.out.println("施放--》寒冰箭"); }}package responsibility;/** * DOC 冰血冷脉技能,冷却时间2分钟 */public class IceBloodFast implements ISkill { @Override public void castSkill() { // 这里可以用来判断技能是否在冷却当中,这里略去了 System.out.println("施放--》冰血冷脉"); }}

测试类:

package responsibility;public class Main { public static void main(String[] args) { Macro macro = new Macro(); macro.bindSkill(new IceBloodFast()); macro.bindSkill(new IceArrow()); macro.castSkill(); }}

测试结果:

正在施放--》冰血冷脉施放--》寒冰箭

总结:责任链模式主要用于,一个请求,可能有多个对象要对其处理的情况。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章