Advertisement

责任链(Chain Of Responsibility)模式

阅读量:

责任链(Chain Of Responsibility)

Intent

通过这种方式让多个对象都有机会处理请求,从而防止请求的发送者和接收者之间存在的耦合关系.将这些对象连接成一个链条,并依次沿着这条链条发送该请求,直到其中一个对象处理它为止.

Class Diagram

  • Handler:定义处理请求的接口,并且实现后继链(successor)
在这里插入图片描述

Implementation

复制代码
    public abstract class Handler {
    
    protected Handler successor;
    
    
    public Handler(Handler successor) {
        this.successor = successor;
    }
    
    
    protected abstract void handleRequest(Request request);
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    public class ConcreteHandler1 extends Handler {
    
    public ConcreteHandler1(Handler successor) {
        super(successor);
    }
    
    
    @Override
    protected void handleRequest(Request request) {
        if (request.getType() == RequestType.TYPE1) {
            System.out.println(request.getName() + " is handle by ConcreteHandler1");
            return;
        }
        if (successor != null) {
            successor.handleRequest(request);
        }
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    public class ConcreteHandler2 extends Handler {
    
    public ConcreteHandler2(Handler successor) {
        super(successor);
    }
    
    
    @Override
    protected void handleRequest(Request request) {
        if (request.getType() == RequestType.TYPE2) {
            System.out.println(request.getName() + " is handle by ConcreteHandler2");
            return;
        }
        if (successor != null) {
            successor.handleRequest(request);
        }
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    public class Request {
    
    private RequestType type;
    private String name;
    
    
    public Request(RequestType type, String name) {
        this.type = type;
        this.name = name;
    }
    
    
    public RequestType getType() {
        return type;
    }
    
    
    public String getName() {
        return name;
    }
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    public enum RequestType {
    TYPE1, TYPE2
    }
    
    
      
      
      
    
    代码解读
复制代码
    public class Client {
    
    public static void main(String[] args) {
    
        Handler handler1 = new ConcreteHandler1(null);
        Handler handler2 = new ConcreteHandler2(handler1);
    
        Request request1 = new Request(RequestType.TYPE1, "request1");
        handler2.handleRequest(request1);
    
        Request request2 = new Request(RequestType.TYPE2, "request2");
        handler2.handleRequest(request2);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    request1 is handle by ConcreteHandler1
    request2 is handle by ConcreteHandler2
    
    
      
      
    
    代码解读

JDK

全部评论 (0)

还没有任何评论哟~