-
The
Object
:
public class Request {
final private StringBuilder data = new StringBuilder();
public void append(final String value) {
data.append(value);
}
public String toString() {
return data.toString();
}
}
-
The
Abstract Handler
:
public abstract class Handler {
private Handler nextHandler;
Handler(final Handler nextHandler) {
this.nextHandler = nextHandler;
}
public void handleRequest(final Request request) {
doRequest(request);
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
public abstract void doRequest(final Request request);
}
-
The
Concrete Handler
:
-
Implementation 1:
public class FirstHandler extends Handler {
FirstHandler(final Handler nextHandler) {
super(nextHandler);
}
public void doRequest(final Request request) {
request.append("FirstHandler ...");
}
}
-
Implementation 2:
public class SecondHandler extends Handler {
SecondHandler(final Handler nextHandler) {
super(nextHandler);
}
public void doRequest(final Request request) {
request.append("SecondHandler ...");
}
}
-
A simple class to test the
Chain of Responsibility
design pattern:
public class ChainOfResponsibilityPatternTest {
public static void main(String[] args) {
// create the request
Request request = new Request();
// create the handlers
Handler secondHandler = new SecondHandler(null);
Handler firstHandler = new FirstHandler(secondHandler);
// handle the request
firstHandler.handleRequest(request);
System.out.println(request);
}
}