【责任链模式】—— 责任处理分级与解耦
程序员文章站
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 解耦。该模式的业务处理以链式的方式进行,客户端不需要知道链式的细节,从而达到解耦的目的。