设计模式 之 责任链模式

来源:互联网 发布:万维天文望远镜软件 编辑:程序博客网 时间:2024/06/14 09:04

不知道大家都写过宏没有,就是一个键绑定多个技能。如果排在前面的技能有CD,则跳过此技能,会执行之后的技能。记得曾经玩DK,打怪的时候,就是用一个键,一直按就行了。在servlet里的doGet和doPost方法,我们一把都把doGet请求发动到doPost里来处理,这也是一种责任链的模式。

这里,有个宏,绑定了 冰血冷脉和寒冰箭,两个技能:

[java] view plaincopy
  1. package responsibility;  
  2.   
  3. /** 
  4.  * DOC 技能接口,要绑定的技能都要实现这个接口 
  5.  *  
  6.  */  
  7. public interface ISkill {  
  8.   
  9.     public void castSkill();  
  10.   
  11. }  

[java] view plaincopy
  1. package responsibility;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. /** 
  7.  * DOC 宏类,用来把多个技能绑在一起,实现一键施放 
  8.  *  
  9.  */  
  10. public class Macro {  
  11.   
  12.     /** 
  13.      * DOC 多个技能绑在一起的集合 
  14.      */  
  15.     public List<ISkill> skills = new ArrayList<ISkill>();  
  16.   
  17.     /** 
  18.      *  
  19.      * DOC 按照绑定顺序施放技能. 
  20.      */  
  21.     public void castSkill() {  
  22.         for (int i = 0; i < skills.size(); i++) {  
  23.             skills.get(i).castSkill();  
  24.         }  
  25.     }  
  26.   
  27.     /** 
  28.      * DOC 绑定技能. 
  29.      *  
  30.      * @param skill 
  31.      */  
  32.     public void bindSkill(ISkill skill) {  
  33.         skills.add(skill);  
  34.     }  
  35.   
  36. }  

[java] view plaincopy
  1. package responsibility;  
  2.   
  3. /** 
  4.  * DOC 寒冰箭技能,无冷却时间 
  5.  *  
  6.  */  
  7. public class IceArrow implements ISkill {  
  8.   
  9.     @Override  
  10.     public void castSkill() {  
  11.         System.out.println("施放--》寒冰箭");  
  12.     }  
  13.   
  14. }  

[java] view plaincopy
  1. package responsibility;  
  2.   
  3. /** 
  4.  * DOC 冰血冷脉技能,冷却时间2分钟 
  5.  */  
  6. public class IceBloodFast implements ISkill {  
  7.   
  8.     @Override  
  9.     public void castSkill() {  
  10.         // 这里可以用来判断技能是否在冷却当中,这里略去了  
  11.         System.out.println("施放--》冰血冷脉");  
  12.     }  
  13.   
  14. }  

测试类:

[java] view plaincopy
  1. package responsibility;  
  2.   
  3. public class Main {  
  4.   
  5.     public static void main(String[] args) {  
  6.         Macro macro = new Macro();  
  7.         macro.bindSkill(new IceBloodFast());  
  8.         macro.bindSkill(new IceArrow());  
  9.         macro.castSkill();  
  10.     }  
  11.   
  12. }  

测试结果:

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


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

0 0
原创粉丝点击