您的位置:首页 > 其它

责任链模式

2004-08-25 21:32 323 查看
 

•很多的对象由每一个对象对其下家的引用而联接起来形成一条链。
•请求在这个链上传递,直到链上的某一个对象决定处理此请求。
•发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求.
•责任链可能是一条直线、一个环链甚至一个树结构的一部分。
 

可以用“击鼓传花”这个例子来了解

•击鼓者将花传给贾母,开始传花游戏。花由贾母传给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又由贾宝玉传给贾环,由贾环传回给贾母,如此往复(见下图)。当鼓声停止时,手中有花的人就得执行酒令 .

 
参与者-抽象

•abstract class Player {
  abstract public void handle(int i);//处理方法
       private Player successor;
  public Player() { successor = null;}
     protected void setSuccessor(Player aSuccessor) {
      successor = aSuccessor;
      }
     public void next(int index) {//传递方法
      if( successor != null ) {
    successor.handle(index);
     }
      else {
    System.out.println("Program terminated.");
     }
   }
}


 

参与者-具体(贾家参与者)

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

 
 击鼓传花者(客户端)

•public class DrumBeater {
  private static Player player;
  static public void main(String[] args)
   {
    player = new JiaMu( new JiaShe( new
               JiaZheng( new JiaBaoYu(new                 
                JiaHuan(null)))));
    player.handle(4);
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class null string 游戏