设计模式(九)责任链(Chain of Responsibility)

说明

定义:

职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

UML图:

设计模式(九)责任链(Chain of Responsibility)

包含角色:

1)Handler:抽象处理着;

2)ConcreteHandler:具体处理者。

代码实现:

典型的"抽象处理者"代码
// 典型的"抽象处理者"代码
abstract class Handler {
    // 为了使得handler之间连接起来像一个链,这里用来存储下处理者
    protected Handler successor;

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    public abstract void handleRequest(String request);
}

典型的"具体处理者"代码

// 典型的"具体处理者"代码
class ConcreteHandler extends  Handler{
    @Override
    public void handleRequest(String request) {
        // 场景1)自己满足处理条件,就不往下流转;自己不满足处理条件,就往下流转
        if(满足条件){
            //1)处理
        }else{
            //2) 交给其他处理者处理
            this.successor.handleRequest(request);
        }

        // 场景2)当然也可能是自己处理完,之后又交给下一个处理者处理
        //1)当前处理
        //2)交个下一个处理者处理
        this.successor.handleRequest(request);

    }
}

注意:

handleReuqest方法内部具体场景可以根据自己实际需求而定:

场景1)自己满足处理条件,就不往下流转;自己不满足处理条件,就往下流转
场景2)当然也可能是自己处理完,之后又交给下一个处理者处理

典型客户端调用代码:

Handler handler1=new ConcreteHandler1();
Handler handler2=new ConcreteHandler2();
Handler handler3=new ConcreteHandler3();

// 创建职责链
handler1.setSuccessor(handler2);
handler2.setSuccessor(handler3);

// 发送请求,请求对象通常为根据需求而定。
handler1.handleRequest("xxx");

 

 
上一篇:Soul网关中的Hystrix熔断插件(二)


下一篇:java23设计模式---class07.责任链模式(Responsibility Of Chain)