feat(hw-03): implement Chain of Responsibility pattern
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user