Java设计模式之责任链模式简介
程序员文章站
2024-02-27 21:55:27
对于使用过宏的朋友应该知道,利用宏可以实现一个键绑定多个技能。例如如果排在前面的技能有cd,则跳过此技能,执行之后的技能。记得曾经玩dk,打怪的时候,就是用一个键,一直按就...
对于使用过宏的朋友应该知道,利用宏可以实现一个键绑定多个技能。例如如果排在前面的技能有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(); } }
测试结果:
正在施放--》冰血冷脉 施放--》寒冰箭
总结:责任链模式主要用于,一个请求,可能有多个对象要对其处理的情况。
上一篇: 删除特殊字符和限定用户输入长度的示例代码
下一篇: java使用http实现文件下载学习示例