From e9ea63b94be5cd57b6fabf7dc9ecf14acad977d3 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 8 Aug 2026 19:18:06 +0400 Subject: [PATCH] feat(hw-03): implement Chain of Responsibility pattern --- .../app/src/main/java/org/example/App.java | 10 ++++++++++ .../java/org/example/chain/AbstractHandler.java | 17 +++++++++++++++++ .../org/example/chain/ConcreteHandlerA.java | 14 ++++++++++++++ .../org/example/chain/ConcreteHandlerB.java | 14 ++++++++++++++ .../main/java/org/example/chain/Handler.java | 8 ++++++++ 5 files changed, 63 insertions(+) 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); +}