feat(hw-03): implement Chain of Responsibility pattern

This commit is contained in:
user
2026-08-08 19:18:06 +04:00
parent c6eb116ab9
commit e9ea63b94b
5 changed files with 63 additions and 0 deletions
@@ -5,6 +5,7 @@ package org.example;
import org.example.adapter.*;
import org.example.builder.*;
import org.example.chain.*;
public class App {
public static void main(String[] args) {
@@ -14,6 +15,7 @@ public class App {
private static void run() {
checkAdapterPattern();
checkBuilderPattern();
checkChainPattern();
}
private static void checkAdapterPattern() {
@@ -29,4 +31,12 @@ public class App {
System.out.println(product);
}
private static void checkChainPattern() {
Handler handler = new ConcreteHandlerA();
handler.setNext(new ConcreteHandlerB());
handler.handle(42);
handler.handle("Hello");
}
}
@@ -0,0 +1,17 @@
package org.example.chain;
/** Abstract Handler */
public abstract class AbstractHandler implements Handler {
private Handler next;
@Override
public void setNext(Handler handler) {
this.next = handler;
}
protected void handleNext(Object request) {
if (next != null) {
next.handle(request);
}
}
}
@@ -0,0 +1,14 @@
package org.example.chain;
/** Concrete Handler A */
public class ConcreteHandlerA extends AbstractHandler {
@Override
public void handle(Object request) {
if (request instanceof Integer) {
System.out.println("ConcreteHandlerA обработал int: " + request);
} else {
handleNext(request);
}
}
}
@@ -0,0 +1,14 @@
package org.example.chain;
/** Concrete Handler B */
public class ConcreteHandlerB extends AbstractHandler {
@Override
public void handle(Object request) {
if (request instanceof String) {
System.out.println("ConcreteHandlerB обработал String: " + request);
} else {
handleNext(request);
}
}
}
@@ -0,0 +1,8 @@
package org.example.chain;
/** Handler */
public interface Handler {
void setNext(Handler handler);
void handle(Object request);
}