【责任链模式】—— 责任处理分级与解耦

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pro_Vinny/article/details/81841747

责任链 模式,将处理请求的对象链接成一条链,并根据链来传递请求,让符合条件的对象来处理请求。

一、关键点

1)先看下这个模式点关键点:

业务处理链: 该模式就是将处理请求的对象按照一定的条件串成来“链子”,从“链子”的指定节点开始,按条件“递归执行”;

分级与解耦:该“链子”是按照一定的条件进行来“分级”,从而即能让“链子”间灵活的调用,调用者不需要关系“链”的执行机制,从而达到解耦的目的。

2)我们再来看下它的类图关系:

Handler:处理者的抽象对象;

ConcreteHandler:具体的处理者角色。

二、实现

2.1 Handler 抽象处理对象

public abstract class Handler {
    protected Handler mSuccessor;

    public void setSuccessor(Handler handler) {
        mSuccessor = handler;
    }

    public abstract void handleRequest(int request);
}

2.2 具体的处理者角色ConcreteHandler

public class ConcreteHandlerA extends Handler {

    @Override
    public void handleRequest(int request) {
        if (request > 1) {
            /** handle somethings */
        } else if (null != mSuccessor) {
            mSuccessor.handleRequest(request);
        }
    }
}

public class ConcreteHandlerB extends Handler {

    @Override
    public void handleRequest(int request) {
        if (request > 2) {
            /** handle somethings */
        } else if (null != mSuccessor) {
            mSuccessor.handleRequest(request);
        }
    }
}

2.3 客户端角色Client

public class Client {

    public static void main(String[] args) {

        ConcreteHandlerA handlerA = new ConcreteHandlerA();
        ConcreteHandlerB handlerB = new ConcreteHandlerB();

        handlerA.setSuccessor(handlerB);
        handlerB.setSuccessor(handlerA);

        handlerA.handleRequest(1);
    }
}

三、小结

3.1  。该模式的特点就是将业务的处理抽象成链式的方式,并根据一定的条件进行“递归”处理;

3.2 解耦。该模式的业务处理以链式的方式进行,客户端不需要知道链式的细节,从而达到解耦的目的。

猜你喜欢

转载自blog.csdn.net/Pro_Vinny/article/details/81841747