Skip to content

Instantly share code, notes, and snippets.

@unclexo
Last active February 22, 2023 17:36
Show Gist options
  • Save unclexo/70348534f856362204ec4ed0d85b380e to your computer and use it in GitHub Desktop.
Save unclexo/70348534f856362204ec4ed0d85b380e to your computer and use it in GitHub Desktop.
Chain of Responsibility pattern JAVA code example
class Job {
private String details;
public Job(String details) {
this.details = details;
}
public String requirements() {
return this.details;
}
}
class StackDetector {
public static boolean match(String stack, String details) {
return details.indexOf(stack) > -1;
}
}
abstract class Handler {
protected Handler successor;
public void forwardToSuccessor(Job job) {
if (this.successor != null)
this.successor.handle(job);
}
public abstract void handle(Job job);
}
class PHPStack extends Handler {
public PHPStack(Handler successor) {
this.successor = successor;
}
public void handle(Job job) {
if (StackDetector.match("PHP", job.requirements()))
// Notify PHP developers
System.out.println("PHP Stack");
else
this.forwardToSuccessor(job);
}
}
class JavaScriptStack extends Handler {
public JavaScriptStack(Handler successor) {
this.successor = successor;
}
public void handle(Job job) {
if (StackDetector.match("JavaScript", job.requirements()))
// Notify JavaScript developers
System.out.println("JavaScript Stack");
else
this.forwardToSuccessor(job);
}
}
class JavaStack extends Handler {
public JavaStack(Handler successor) {
this.successor = successor;
}
public void handle(Job job) {
if (StackDetector.match("Java", job.requirements()))
// Notify Java developers
System.out.println("Java Stack");
else
this.forwardToSuccessor(job);
}
}
class DoNothing extends Handler {
public void handle(Job job) {
// Do nothing
System.out.println("The request object is unhandled");
}
}
class Main {
public static void main(String[] args) {
// Chain of Job handler objects
Handler doNothing = new DoNothing();
Handler javaStack = new JavaStack(doNothing);
Handler javaScriptStack = new JavaScriptStack(javaStack);
Handler phpStack = new PHPStack(javaScriptStack);
// The request object to be handled
Job job = new Job("PHP"); // Try changing the value to Python, JavaScript or Java
// Starts handling the Job object
phpStack.handle(job);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment