From 1168f6e41f744f6704ae3ea4fb91f00dd1524454 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Sun, 31 Aug 2014 09:17:43 +0300 Subject: [PATCH] Updated decorator implementation and class diagram. Added comments. --- decorator/etc/decorator.jpg | Bin 20292 -> 32539 bytes decorator/src/main/java/com/iluwatar/App.java | 12 ++++++++++-- .../src/main/java/com/iluwatar/Hostile.java | 8 ++++++++ .../main/java/com/iluwatar/SmartTroll.java | 6 +++--- .../src/main/java/com/iluwatar/Troll.java | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 decorator/src/main/java/com/iluwatar/Hostile.java diff --git a/decorator/etc/decorator.jpg b/decorator/etc/decorator.jpg index 9c9110b2b2cfe248560f393e21aa7cab166144fe..4e234a9b2c523c4709ae317a7588f5adfc3ba2b8 100644 GIT binary patch literal 32539 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 literal 20292 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 diff --git a/decorator/src/main/java/com/iluwatar/App.java b/decorator/src/main/java/com/iluwatar/App.java index f002c159d..77978844d 100644 --- a/decorator/src/main/java/com/iluwatar/App.java +++ b/decorator/src/main/java/com/iluwatar/App.java @@ -1,17 +1,25 @@ package com.iluwatar; +/** + * + * Decorator pattern is more flexible alternative to + * subclassing. The decorator class implements the same + * interface as the target and uses composition to + * "decorate" calls to the target. + * + */ public class App { public static void main( String[] args ) { System.out.println("A simple looking troll approaches."); - Troll troll = new Troll(); + Hostile troll = new Troll(); troll.attack(); troll.fleeBattle(); System.out.println("\nA smart looking troll surprises you."); - Troll smart = new SmartTroll(new Troll()); + Hostile smart = new SmartTroll(new Troll()); smart.attack(); smart.fleeBattle(); } diff --git a/decorator/src/main/java/com/iluwatar/Hostile.java b/decorator/src/main/java/com/iluwatar/Hostile.java new file mode 100644 index 000000000..38b2cad07 --- /dev/null +++ b/decorator/src/main/java/com/iluwatar/Hostile.java @@ -0,0 +1,8 @@ +package com.iluwatar; + +public interface Hostile { + + void attack(); + void fleeBattle(); + +} diff --git a/decorator/src/main/java/com/iluwatar/SmartTroll.java b/decorator/src/main/java/com/iluwatar/SmartTroll.java index 835891be3..d931adff8 100644 --- a/decorator/src/main/java/com/iluwatar/SmartTroll.java +++ b/decorator/src/main/java/com/iluwatar/SmartTroll.java @@ -1,10 +1,10 @@ package com.iluwatar; -public class SmartTroll extends Troll { +public class SmartTroll implements Hostile { - private Troll decorated; + private Hostile decorated; - public SmartTroll(Troll decorated) { + public SmartTroll(Hostile decorated) { this.decorated = decorated; } diff --git a/decorator/src/main/java/com/iluwatar/Troll.java b/decorator/src/main/java/com/iluwatar/Troll.java index f5c10018c..3bcf4ec47 100644 --- a/decorator/src/main/java/com/iluwatar/Troll.java +++ b/decorator/src/main/java/com/iluwatar/Troll.java @@ -1,6 +1,6 @@ package com.iluwatar; -public class Troll { +public class Troll implements Hostile { public void attack() { System.out.println("The troll swings at you with a club!");