欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 12:51:45
...

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

一、关键点

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 解耦。该模式的业务处理以链式的方式进行,客户端不需要知道链式的细节,从而达到解耦的目的。