• 行为模式---之--责任链模式


    责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
     
    角色:
    1.抽象处理者(Handler):定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定的返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。
    2.具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
     
    示例代码:
     1 public class ChainTest {
     2     private static Handler handler1,handler2;
     3     public static void main(String[] args) {
     4         handler1 = new ConcreteHandler();
     5         handler2 = new ConcreteHandler();
     6         handler1.setSuccessor(handler2);
     7         handler1.handleRequest();
     8     }
     9 
    10 }
    11 //抽象处理者
    12 abstract class Handler{
    13     protected Handler successor;
    14     //调用此处理方法处理请求
    15     public abstract void handleRequest();
    16     //赋值方法,调用此方法设定下家
    17     public void setSuccessor(Handler successor){
    18         this.successor = successor;
    19     }
    20     //取值方法
    21     public Handler getSuccessor(){
    22         return successor;
    23     }
    24 }
    25 
    26 //具体处理者
    27 class ConcreteHandler extends Handler{
    28     
    29     @Override
    30     public void handleRequest() {
    31         if(getSuccessor()!=null){
    32             System.out.println("The request is passed to "+ getSuccessor());
    33             getSuccessor().handleRequest();
    34         }else{
    35             System.out.println("The request is handled here");
    36         }
    37     }
    38     
    39 }
    纯与不纯责任链模式:
    一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
        在一个纯的责任链模式里,一个请求必须被某一个处理者对象所接收;在 一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。
     
    责任链模式减低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。一个链可以是一条线,一个树,也可以是一个环。链的拓扑结构可以是单连通的或多连通的,责任链模式并不指定责任链的拓扑结构。但是责任链模式要求在同一个时间里,命令只可以被传给一个下家(或被处理掉),而不可以传给多于一个下家。
  • 相关阅读:
    在 Linux 下搭建 Git 服务器***
    使用 SVN Hook 实现服务器端代码自动更新
    git服务器的建立
    Oracle 11gR2 RAC集群服务启动与关闭总结
    Cluster的日记体系
    DB time VS. DB CPU
    oracle 内存分配和调优 总结
    利用logminer恢复delete误删除操作的数据
    大话RAC介质恢复---联机日志损坏
    ORACLE联机日志文件丢失或损坏的处理方法(转)
  • 原文地址:https://www.cnblogs.com/wn398/p/3236009.html
Copyright © 2020-2023  润新知