美文网首页
职责链模式(Chain of Resposiblity)

职责链模式(Chain of Resposiblity)

作者: bobcorbett | 来源:发表于2017-08-16 09:57 被阅读0次

    职责链模式(Chain of Resposiblity) :使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到又一个对象处理它为止。
    PS:通俗的讲是一个实体或者变量进行类之间的传递,判断类(变量)的特征key字段,直到找到能处理这个对象的类进行处理为止。缺点是也有可能遍历了整条链找不到任何一个能处理的类。

    主方法

    public class main {
        public static void main(String[] args) {
            Handler h1 = new HandlerImpl1();
            Handler h2 = new HandlerImpl2();
            Handler h3 = new HandlerImpl3();
            //声明责任传承关系
            h1.setSuccessor(h2);
            h2.setSuccessor(h3);
    
            int[] requests = new int[]{2, 5, 14, 22, 18, 3, 27, 20};
            for (int request : requests) {
                h1.HandleRequest(request);
            }
        }
    }
    

    抽象类

    public abstract class Handler {
        protected Handler successor;
    
        public void setSuccessor(Handler successor) {//设置继任者
            this.successor = successor;
        }
    
        public abstract void HandleRequest(int request);
    }
    

    继任者1~3

    public class HandlerImpl1 extends Handler {
        public void HandleRequest(int request) {
            if (request >= 0 && request < 10) {
                System.out.println(String.format("{%s}处理请求{%d}", getClass().getName(), request));
            } else if (successor != null) {
                successor.HandleRequest(request);
            }
        }
    }
    
    public class HandlerImpl2 extends Handler {
        public void HandleRequest(int request) {
            if (request >= 10 && request < 20) {
                System.out.println(String.format("{%s}处理请求{%d}", getClass().getName(), request));
            } else if (successor != null) {
                successor.HandleRequest(request);
            }
        }
    }
    
    public class HandlerImpl3 extends Handler {
        public void HandleRequest(int request) {
            if (request >= 20 && request < 30) {
                System.out.println(String.format("{%s}处理请求{%d}", getClass().getName(), request));
            } else if (successor != null) {
                successor.HandleRequest(request);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:职责链模式(Chain of Resposiblity)

          本文链接:https://www.haomeiwen.com/subject/wmobrxtx.html