diff --git a/hw-03/project-root/app/src/main/java/org/example/App.java b/hw-03/project-root/app/src/main/java/org/example/App.java index 51f8968..067baa5 100644 --- a/hw-03/project-root/app/src/main/java/org/example/App.java +++ b/hw-03/project-root/app/src/main/java/org/example/App.java @@ -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"); + } } diff --git a/hw-03/project-root/app/src/main/java/org/example/chain/AbstractHandler.java b/hw-03/project-root/app/src/main/java/org/example/chain/AbstractHandler.java index e69de29..f6b9bdf 100644 --- a/hw-03/project-root/app/src/main/java/org/example/chain/AbstractHandler.java +++ b/hw-03/project-root/app/src/main/java/org/example/chain/AbstractHandler.java @@ -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); + } + } +} diff --git a/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerA.java b/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerA.java index e69de29..e053746 100644 --- a/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerA.java +++ b/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerA.java @@ -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); + } + } +} diff --git a/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerB.java b/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerB.java index e69de29..43e191b 100644 --- a/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerB.java +++ b/hw-03/project-root/app/src/main/java/org/example/chain/ConcreteHandlerB.java @@ -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); + } + } +} diff --git a/hw-03/project-root/app/src/main/java/org/example/chain/Handler.java b/hw-03/project-root/app/src/main/java/org/example/chain/Handler.java index e69de29..55f9af6 100644 --- a/hw-03/project-root/app/src/main/java/org/example/chain/Handler.java +++ b/hw-03/project-root/app/src/main/java/org/example/chain/Handler.java @@ -0,0 +1,8 @@ +package org.example.chain; + +/** Handler */ +public interface Handler { + void setNext(Handler handler); + + void handle(Object request); +}