设计模式——责任链模式

责任链模式,使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有对象处理它为止。
在责任链模式中一个请求发送到链中后, 前一节点消费部分消息, 然后交由后续
节点继续处理。
实例代码:

// 处理等级
public class Level {

}

// 请求类
public class Request {

    public Level getRequestLevel(){
        // 请求的处理等级
        return null;
    }

}

// 响应类
public class Response {

}

// 抽象处理者
public abstract class Handler {

    // 下一个处理者
    private Handler nextHandler;

    // 处理流程及分发
    public final Response handlerMessage(Request request){
        Response response = null;
        // 判断处理级别
        if(this.getHandlerLever().equals(request.getRequestLevel())){
            // 自己的处理级别直接自己处理
            response = this.echo(request);
        }else{
            // 不是自己的处理级别,需要判断后续是否有处理者
            if(this.nextHandler != null){
                response = this.nextHandler.handlerMessage(request);
            }else{
                // 没有后续处理者,需自行处理
            }
        }
        return response;
    }

    // 指定下一个处理者
    public void setNext(Handler handler){
        this.nextHandler = handler;
    }

    // 处理者自身的处理等级
    protected abstract Level getHandlerLever();

    // 处理者的业务处理方法
    protected abstract Response echo(Request request);

}

// 处理者1
public class ConcreteHandler1 extends Handler{

    @Override
    protected Level getHandlerLever() {
        // 自身的处理等级
        return null;
    }

    @Override
    protected Response echo(Request request) {
        // 自身的处理方法
        return null;
    }

}

// 处理者2
public class ConcreteHandler2 extends Handler{

    @Override
    protected Level getHandlerLever() {
        // 自身的处理等级
        return null;
    }

    @Override
    protected Response echo(Request request) {
        // 自身的处理方法
        return null;
    }

}

// 处理者3
public class ConcreteHandler3 extends Handler{

    @Override
    protected Level getHandlerLever() {
        // 自身的处理等级
        return null;
    }

    @Override
    protected Response echo(Request request) {
        // 自身的处理方法
        return null;
    }

}

// 测试类
public class Test {

    public static void main(String[] args) {
        // 三个处理者
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        Handler handler3 = new ConcreteHandler3();
        // 安排三个处理者的职责顺序
        handler1.setNext(handler2);
        handler2.setNext(handler3);
        // 第一个处理者处理
        Response response = handler1.handlerMessage(new Request());
    }

}

责任链模式非常显著的优点是将请求和处理分开。 请求者可以不用知道是谁处理的, 处理者可以不用知道请求的全貌,两者解耦, 提高系统的灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值