`
eneasy
  • 浏览: 126358 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

责任链模式

UP 
阅读更多
十七. 责任链模式
整理自 《java与模式》阎宏编著


1.意图:

    将多个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。客户端并不知道链上的哪个对象最终处理这个请求,从而降低了请求的发送者和接收者之间的耦合关系。

2.类图:

                                                

3.原理:

4.特征:

    抽象处理者(Handler)角色:定义处理请求的接口。如有需要,可以定义设定和返回下家处理对象的引用的方法。

    具体处理者(ConcreteHandler)角色:具体处理者接收到请求后,可以选择将请求处理掉,或者传给下家处理对象。
5.说明:

6.使用案例:

    DHTML中的事件处理.
    过滤器

7.代码:

//抽象处理者(Handler)角色  Handler.java

public abstract class Handler

{

     protected Handler successor;



     public abstract void handleRequest();



     public void setSuccessor(Handler successor)

     {

         this.successor = successor;

     }



     public Handler getSuccessor()

     {

         return successor;

     }

}



// ConcreteHandler1.java

public class ConcreteHandler1 extends Handler



     public void handleRequest()

     {

         boolean someCondition = false;

         if (someCondition)

         {

              //如果满足条件,进行处理

         }

         else

         {

              //否则,传递给下家处理

              if (successor != null)

              {

                   successor.handleRequest();

              }

         }

     }

}



// ConcreteHandler2.java

public class ConcreteHandler2 extends Handler



     public void handleRequest()

     {

         boolean someCondition = true;

         if (someCondition)

         {

              //如果满足条件,进行处理

         }

         else

         {

              //否则,传递给下家处理

              if (successor != null)

              {

                   successor.handleRequest();

              }

         }

     }

}



public class Client

{

     public static int Main(String[] args)

     {

         // Set up chain (usually one need to be done once)

         Handler firstHandler = new ConcreteHandler1();

         Handler secondHandler = new ConcreteHandler2();

         //Handler thirdHandler = new ConcreteHandler3();

         firstHandler.setSuccessor(secondHandler);

         //secondHandler.SetSuccessor(thirdHandler);



         // After setting up the chain of responsibility, we can

         // now generate requests and pass then off to the chain to be handled      

         firstHandler.handleRequest();

         return 0;

     }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics