设计模式之责任链模式

责任链模式

  1. 责任链模式结构图

  2. 示例代码:

    // 抽象处理类
    public abstract class Handler {
    
        protected Handler nextHandler;
    
        public void add(Handler handler){
            this.nextHandler = handler;
        }
    
        public abstract void HandlerRequest(String request);
    }
    
    // 具体处理类A
    public class HandlerA extends Handler{
        @Override
        public void HandlerRequest(String request) {
            if ("handlerA".equals(request)){
                System.out.println("HandlerA处理请求......");
            }
            if (this.nextHandler != null){
                this.nextHandler.HandlerRequest(request);
            }
        }
    }
    
    // 具体处理类B
    public class HandlerB extends Handler{
        @Override
        public void HandlerRequest(String request) {
            if ("handlerB".equals(request)){
                System.out.println("HandlerB处理请求......");
            }
            if (this.nextHandler != null){
                this.nextHandler.HandlerRequest(request);
            }
        }
    }
    
    // 测试类
    public class ChainTest {
    
        public static void main(String[] args) {
            HandlerA handlerA = new HandlerA();
            HandlerB handlerB = new HandlerB();
            handlerA.add(handlerB);
            handlerA.HandlerRequest("handlerB");
        }
    }
    
    
    
  3. 总结:

    责任链模式需要一个链条,将需要处理的问题分开封装到不同的类中,每个处理类只管负责处理自己的部分,易于扩展.

    优点:请求与处理解偶,链路结构灵活,易于调整,易于扩展请求,符合开闭原则.

    缺点:责任链太长或处理时间太长,会影响整体性能,若存在循环引用,则会造成死循环,导致系统崩溃.

posted @ 2021-04-13 23:57  justKen  阅读(41)  评论(0编辑  收藏  举报