When there are multiple processors to handle the request when it falls on different range, and if when current processor is not able to handle it will pass to next processor, in this case, we can apply chain of responsibility pattern to decouple requestor caller and request processor.
Processor we can give an abstract class to define, polymeric another processor, if current processor can't handle the request, will pass to polymerized processor to handle it, in abstract parrent class, we provide set method to link current processor and next processor, also we provide handle request abstract method,
/**
* @Author Carter Deng
* @Date 2021/11/20
*/
public abstract class Processor {
Processor processor;
String name;
public Processor(String name) {
this.name = name;
}
public void setProcessor(Processor processor) {
this.processor = processor;
}
public void setName(String name) {
this.name = name;
}
public abstract void process(Request request);
}
Concrete processor will provide implementation details,
/**
* @Author Carter Deng
* @Date 2021/11/20
*/
public class ProcessorLevel1 extends Processor {
public ProcessorLevel1(String name) {
super(name);
}
@Override
public void process(Request request) {
if (request.levelId <= 1) {
System.out.println(name + " is handling " + request.requestContent);
} else {
processor.process(request);
}
}
}
When we process the request, we need to use set method to link the processors as a chain, in this case we can pass the request to any processor and in the end it can automatically find the according processor to handle the request.