隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時(shí)請(qǐng)注明出處,謝謝。

          常用鏈接

          常用設(shè)置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156125
          • 排名 - 390

          最新評(píng)論

          [關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》,Chain of Responsibility,責(zé)任鏈模式
          [環(huán)境]:StarUML5.0 + JDK6
          [作者]:Winty (wintys@gmail.com)
          [正文]:

          package pattern.chainofresponsibility;

          /**
           * 責(zé)任鏈模式:Chain of Responsibility
           * @version 2009-5-9
           * @author Winty(wintys@gmail.com)
           */
          public class ChainOfResponsibilityTest{
              public static void main(String[] args){
                  Handler handler1 = new ConcreteHandler1();
                  Handler handler2 = new ConcreteHandler2();
                  Handler handler3 = new ConcreteHandler3();

                  //設(shè)置責(zé)任鏈
                  handler3.setSuccessor(handler2);
                  handler2.setSuccessor(handler1);

                  //發(fā)送命令
                  handler3.handleRequest();
              }
          }

          /**
           *抽象處理者
           */
          abstract class Handler{
              protected Handler successor;

              public Handler getSuccessor(){
                  return successor;
              }

              public void setSuccessor(Handler successor){
                  this.successor = successor;
              }

              public abstract void handleRequest();
          }

          /**
           *具體處理者
           */
          class ConcreteHandler1 extends Handler{
              public void handleRequest(){
                  if(getSuccessor() != null){
                      System.out.print("Request passed:from class Concrete1");
                      System.out.println(" to class" + getSuccessor().getClass().getName());

                      getSuccessor().handleRequest();
                  }
                  else{
                      System.out.println("Request handled in ConcreteHandler1");
                  }
              }
          }

          /**
           *具體處理者
           */
          class ConcreteHandler2  extends Handler{
              public void handleRequest(){
                  if(getSuccessor() != null){
                      System.out.print("Request passed:from class Concrete2");
                      System.out.println(" to class " + getSuccessor().getClass().getName());

                      getSuccessor().handleRequest();
                  }
                  else{
                      System.out.println("Request handled in ConcreteHandler2");
                  }
              }
          }

          /**
           *具體處理者
           */
          class ConcreteHandler3  extends Handler{
              public void handleRequest(){
                  if(getSuccessor() != null){
                      System.out.print("Request passed:from class Concrete3");
                      System.out.println(" to class " + getSuccessor().getClass().getName());

                      getSuccessor().handleRequest();
                  }
                  else{
                      System.out.println("Request handled in ConcreteHandler3");
                  }
              }
          }

          posted on 2009-05-09 16:47 天堂露珠 閱讀(1486) 評(píng)論(1)  編輯  收藏 所屬分類: Pattern

          FeedBack:
          # re: [原]責(zé)任鏈模式 2009-05-09 21:34 highkay
          Request passed:from class Concrete3
          Request handled in ConcreteHandler3
          這兩個(gè)地方可以用this.getClass().getName()代替更好  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 昂仁县| 青海省| 琼结县| 开封市| 社旗县| 花莲市| 长海县| 易门县| 柘荣县| 黎平县| 三明市| 涟源市| 裕民县| 兴隆县| 凌源市| 宜黄县| 双柏县| 亚东县| 嘉黎县| 栾城县| 德清县| 安图县| 乡城县| 云梦县| 喀喇沁旗| 扎赉特旗| 哈巴河县| 新丰县| 宁安市| 长丰县| 竹北市| 漯河市| 安溪县| 石屏县| 临安市| 大竹县| 博客| 中方县| 格尔木市| 霍邱县| 桑植县|