From 2658b620a579883bc13af0b18f48cacb5aeed036 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 8 Aug 2026 19:32:59 +0400 Subject: [PATCH] feat(hw-03): implement Decorator pattern --- .../app/src/main/java/org/example/App.java | 9 +++++++++ .../java/org/example/decorator/Component.java | 6 ++++++ .../org/example/decorator/ConcreteComponent.java | 10 ++++++++++ .../org/example/decorator/ConcreteDecorator.java | 15 +++++++++++++++ .../java/org/example/decorator/Decorator.java | 16 ++++++++++++++++ 5 files changed, 56 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 067baa5..847e3c4 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 @@ -6,6 +6,7 @@ package org.example; import org.example.adapter.*; import org.example.builder.*; import org.example.chain.*; +import org.example.decorator.*; public class App { public static void main(String[] args) { @@ -16,6 +17,7 @@ public class App { checkAdapterPattern(); checkBuilderPattern(); checkChainPattern(); + checkDecoratorPattern(); } private static void checkAdapterPattern() { @@ -39,4 +41,11 @@ public class App { handler.handle(42); handler.handle("Hello"); } + + private static void checkDecoratorPattern() { + Component component = new ConcreteComponent(); + Component decorator = new ConcreteDecorator(component); + + decorator.operation(); + } } diff --git a/hw-03/project-root/app/src/main/java/org/example/decorator/Component.java b/hw-03/project-root/app/src/main/java/org/example/decorator/Component.java index e69de29..e7141bb 100644 --- a/hw-03/project-root/app/src/main/java/org/example/decorator/Component.java +++ b/hw-03/project-root/app/src/main/java/org/example/decorator/Component.java @@ -0,0 +1,6 @@ +package org.example.decorator; + +/** Component */ +public interface Component { + void operation(); +} diff --git a/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteComponent.java b/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteComponent.java index e69de29..a0e8a4b 100644 --- a/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteComponent.java +++ b/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteComponent.java @@ -0,0 +1,10 @@ +package org.example.decorator; + +/** Concrete Component */ +public class ConcreteComponent implements Component { + + @Override + public void operation() { + System.out.println("ConcreteComponent выполняет операцию"); + } +} diff --git a/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteDecorator.java b/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteDecorator.java index e69de29..7938da1 100644 --- a/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteDecorator.java +++ b/hw-03/project-root/app/src/main/java/org/example/decorator/ConcreteDecorator.java @@ -0,0 +1,15 @@ +package org.example.decorator; + +/** Concrete Decorator */ +public class ConcreteDecorator extends Decorator { + + public ConcreteDecorator(Component component) { + super(component); + } + + @Override + public void operation() { + component.operation(); + System.out.println("ConcreteDecorator добавляет поведение"); + } +} diff --git a/hw-03/project-root/app/src/main/java/org/example/decorator/Decorator.java b/hw-03/project-root/app/src/main/java/org/example/decorator/Decorator.java index e69de29..77e9ec3 100644 --- a/hw-03/project-root/app/src/main/java/org/example/decorator/Decorator.java +++ b/hw-03/project-root/app/src/main/java/org/example/decorator/Decorator.java @@ -0,0 +1,16 @@ +package org.example.decorator; + +/** Decorator */ +public abstract class Decorator implements Component { + + protected Decorator(Component component) { + this.component = component; + } + + @Override + public void operation() { + component.operation(); + } + + protected final Component component; +}