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.adapter.*;
|
||||||
import org.example.builder.*;
|
import org.example.builder.*;
|
||||||
|
import org.example.chain.*;
|
||||||
|
|
||||||
public class App {
|
public class App {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@@ -14,6 +15,7 @@ public class App {
|
|||||||
private static void run() {
|
private static void run() {
|
||||||
checkAdapterPattern();
|
checkAdapterPattern();
|
||||||
checkBuilderPattern();
|
checkBuilderPattern();
|
||||||
|
checkChainPattern();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkAdapterPattern() {
|
private static void checkAdapterPattern() {
|
||||||
@@ -29,4 +31,12 @@ public class App {
|
|||||||
|
|
||||||
System.out.println(product);
|
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