From 30363cbb7f47b3fd8173c318663d01fc4513679b Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sat, 26 Dec 2015 22:05:12 +0000
Subject: [PATCH 01/13] Create maven module for delegation pattern #324

---
 delegation/pom.xml | 39 +++++++++++++++++++++++++++++++++++++++
 pom.xml            |  1 +
 2 files changed, 40 insertions(+)
 create mode 100644 delegation/pom.xml

diff --git a/delegation/pom.xml b/delegation/pom.xml
new file mode 100644
index 000000000..96c1fc952
--- /dev/null
+++ b/delegation/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ The MIT License (MIT)
+  ~
+  ~ Copyright (c) 2015 Orange Foundry
+  ~
+  ~ Permission is hereby granted, free of charge, to any person obtaining a copy
+  ~ of this software and associated documentation files (the "Software"), to deal
+  ~ in the Software without restriction, including without limitation the rights
+  ~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  ~ copies of the Software, and to permit persons to whom the Software is
+  ~ furnished to do so, subject to the following conditions:
+  ~
+  ~ The above copyright notice and this permission notice shall be included in
+  ~ all copies or substantial portions of the Software.
+  ~
+  ~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  ~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  ~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  ~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  ~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  ~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  ~ THE SOFTWARE.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>java-design-patterns</artifactId>
+        <groupId>com.iluwatar</groupId>
+        <version>1.9.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>delegation</artifactId>
+
+
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 9fa150dd4..c0c326d57 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,6 +88,7 @@
 		<module>reactor</module>
 		<module>caching</module>
 		<module>publish-subscribe</module>
+		<module>delegation</module>
 	</modules>
 
 	<dependencyManagement>

From bdacfe30c1bc68ae420d7d32e8f409762771ddd2 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sat, 26 Dec 2015 22:20:53 +0000
Subject: [PATCH 02/13] Added skeleton code for delegation pattern #324

---
 .../delegation/simple/Controller.java         | 14 +++++++++++
 .../iluwatar/delegation/simple/Printer.java   |  6 +++++
 .../delegation/simple/PrinterController.java  | 13 ++++++++++
 .../simple/printers/CanonPrinter.java         | 12 ++++++++++
 .../simple/printers/EpsonPrinter.java         | 12 ++++++++++
 .../delegation/simple/printers/HPPrinter.java | 12 ++++++++++
 .../iluwatar/delegation/simple/AppTest.java   | 24 +++++++++++++++++++
 7 files changed, 93 insertions(+)
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java
 create mode 100644 delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java

diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java b/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
new file mode 100644
index 000000000..487b827eb
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
@@ -0,0 +1,14 @@
+package com.iluwatar.delegation.simple;
+
+public abstract class Controller<T extends Printer> {
+
+    private Printer printer;
+
+    public Controller(Printer printer) {
+        this.printer = printer;
+    }
+
+    protected Printer getPrinter() {
+        return printer;
+    }
+}
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java b/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
new file mode 100644
index 000000000..1bc0dd13d
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
@@ -0,0 +1,6 @@
+package com.iluwatar.delegation.simple;
+
+public interface Printer {
+
+    void print(final String message);
+}
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
new file mode 100644
index 000000000..5fb8742a3
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
@@ -0,0 +1,13 @@
+package com.iluwatar.delegation.simple;
+
+public class PrinterController extends Controller implements Printer {
+
+    public PrinterController(Printer printer) {
+        super(printer);
+    }
+
+    @Override
+    public void print(String message) {
+        getPrinter().print(message);
+    }
+}
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
new file mode 100644
index 000000000..76afd5309
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
@@ -0,0 +1,12 @@
+package com.iluwatar.delegation.simple.printers;
+
+import com.iluwatar.delegation.simple.Printer;
+
+public class CanonPrinter implements Printer {
+
+    @Override
+    public void print(String message) {
+        System.out.println("Canon Printer : " + message);
+    }
+
+}
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
new file mode 100644
index 000000000..cc371fd68
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
@@ -0,0 +1,12 @@
+package com.iluwatar.delegation.simple.printers;
+
+import com.iluwatar.delegation.simple.Printer;
+
+public class EpsonPrinter implements Printer{
+
+    @Override
+    public void print(String message) {
+        System.out.println("Epson Printer : " + message);
+    }
+
+}
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java
new file mode 100644
index 000000000..7c57ee43b
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java
@@ -0,0 +1,12 @@
+package com.iluwatar.delegation.simple.printers;
+
+import com.iluwatar.delegation.simple.Printer;
+
+public class HPPrinter implements Printer {
+
+    @Override
+    public void print(String message) {
+        System.out.println("HP Printer : " + message);
+    }
+
+}
diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
new file mode 100644
index 000000000..fc8d277a7
--- /dev/null
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
@@ -0,0 +1,24 @@
+package com.iluwatar.delegation.simple;
+
+import com.iluwatar.delegation.simple.printers.CanonPrinter;
+import com.iluwatar.delegation.simple.printers.EpsonPrinter;
+import com.iluwatar.delegation.simple.printers.HPPrinter;
+
+public class AppTest {
+
+    public static final String MESSAGE_TO_PRINT = "hello world";
+
+    public static void main(String args[]) {
+        Printer hpPrinter = new HPPrinter();
+        Printer canonPrinter = new CanonPrinter();
+        Printer epsonPrinter = new EpsonPrinter();
+
+        PrinterController hpPrinterController = new PrinterController(hpPrinter);
+        PrinterController canonPrinterController = new PrinterController(canonPrinter);
+        PrinterController epsonPrinterController = new PrinterController(epsonPrinter);
+
+        hpPrinterController.print(MESSAGE_TO_PRINT);
+        canonPrinterController.print(MESSAGE_TO_PRINT);
+        epsonPrinterController.print(MESSAGE_TO_PRINT);
+    }
+}

From c3184255bfed20a9d365790e87839300d1f8f1bd Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sat, 26 Dec 2015 22:29:45 +0000
Subject: [PATCH 03/13] Add template index.md for population later #324

---
 delegation/index.md | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 delegation/index.md

diff --git a/delegation/index.md b/delegation/index.md
new file mode 100644
index 000000000..a36821668
--- /dev/null
+++ b/delegation/index.md
@@ -0,0 +1,28 @@
+--- # this is so called 'Yaml Front Matter', read up on it here: http://jekyllrb.com/docs/frontmatter/
+layout: pattern # layout must allways be pattern
+title: Best Pattern Ever # the properly formatted title
+folder: best-pattern-ever # the folder name in which this pattern lies
+permalink: /patterns/best-pattern-ever/ # the permalink to the pattern, to keep this uniform please stick to /patterns/FOLDER/
+
+# both categories and tags are Yaml Lists
+# you can either just pick one or write a list with '-'s
+# usable categories and tags are listed here: https://github.com/iluwatar/java-design-patterns/blob/gh-pages/_config.yml
+categories: creational # categories of the pattern
+tags: # tags of the pattern
+ - best
+ - ever
+ - awesome
+---
+
+**Intent:** Makes your code awesome
+
+![alt text](./etc/best_pattern.png "Best Pattern Ever")
+
+**Applicability:** Use the Best Pattern Ever pattern when
+
+* you want to be the best
+* you need to ...
+
+**Real world examples:**
+
+* [Nowhere](http://no.where.com)
\ No newline at end of file

From f0ff8ad4b321af3977f25bf1617764459ade5ea9 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sat, 26 Dec 2015 22:55:12 +0000
Subject: [PATCH 04/13] Created a unit test for build, added junit to pom for
 delegation maven module. #324

---
 delegation/pom.xml                                        | 8 +++++++-
 .../test/java/com/iluwatar/delegation/simple/AppTest.java | 4 +++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/delegation/pom.xml b/delegation/pom.xml
index 96c1fc952..47dbc3844 100644
--- a/delegation/pom.xml
+++ b/delegation/pom.xml
@@ -35,5 +35,11 @@
 
     <artifactId>delegation</artifactId>
 
-
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
index fc8d277a7..642fc218e 100644
--- a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
@@ -3,12 +3,14 @@ package com.iluwatar.delegation.simple;
 import com.iluwatar.delegation.simple.printers.CanonPrinter;
 import com.iluwatar.delegation.simple.printers.EpsonPrinter;
 import com.iluwatar.delegation.simple.printers.HPPrinter;
+import org.junit.Test;
 
 public class AppTest {
 
     public static final String MESSAGE_TO_PRINT = "hello world";
 
-    public static void main(String args[]) {
+    @Test
+    public static void main() {
         Printer hpPrinter = new HPPrinter();
         Printer canonPrinter = new CanonPrinter();
         Printer epsonPrinter = new EpsonPrinter();

From 84fd2348eaba41b62507066b9bd0ddc85f707b2e Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sat, 26 Dec 2015 23:02:45 +0000
Subject: [PATCH 05/13] 3am Code is starting to show. Get this build working.
 #324

---
 .../src/test/java/com/iluwatar/delegation/simple/AppTest.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
index 642fc218e..7ce5d71f1 100644
--- a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
@@ -10,7 +10,7 @@ public class AppTest {
     public static final String MESSAGE_TO_PRINT = "hello world";
 
     @Test
-    public static void main() {
+    public void main() {
         Printer hpPrinter = new HPPrinter();
         Printer canonPrinter = new CanonPrinter();
         Printer epsonPrinter = new EpsonPrinter();

From fb0617e9c5d18372fc785c4c096411bc7f744c4c Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sun, 27 Dec 2015 13:59:50 +0000
Subject: [PATCH 06/13] Make AppTest.java match other patterns and update
 AppTest.java to match other patterns #324

---
 .../delegation/simple/printers/App.java       | 24 +++++++++++++++++++
 .../iluwatar/delegation/simple/AppTest.java   | 24 +++++--------------
 2 files changed, 30 insertions(+), 18 deletions(-)
 create mode 100644 delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java

diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
new file mode 100644
index 000000000..7668637f7
--- /dev/null
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
@@ -0,0 +1,24 @@
+package com.iluwatar.delegation.simple.printers;
+
+import com.iluwatar.delegation.simple.Printer;
+import com.iluwatar.delegation.simple.PrinterController;
+
+public class App {
+
+    public static final String MESSAGE_TO_PRINT = "hello world";
+
+    public static void main(String[] args) {
+        Printer hpPrinter = new HPPrinter();
+        Printer canonPrinter = new CanonPrinter();
+        Printer epsonPrinter = new EpsonPrinter();
+
+        PrinterController hpPrinterController = new PrinterController(hpPrinter);
+        PrinterController canonPrinterController = new PrinterController(canonPrinter);
+        PrinterController epsonPrinterController = new PrinterController(epsonPrinter);
+
+        hpPrinterController.print(MESSAGE_TO_PRINT);
+        canonPrinterController.print(MESSAGE_TO_PRINT);
+        epsonPrinterController.print(MESSAGE_TO_PRINT);
+    }
+
+}
diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
index 7ce5d71f1..545f62d12 100644
--- a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
@@ -1,26 +1,14 @@
 package com.iluwatar.delegation.simple;
 
-import com.iluwatar.delegation.simple.printers.CanonPrinter;
-import com.iluwatar.delegation.simple.printers.EpsonPrinter;
-import com.iluwatar.delegation.simple.printers.HPPrinter;
+import com.iluwatar.delegation.simple.printers.App;
 import org.junit.Test;
 
 public class AppTest {
 
-    public static final String MESSAGE_TO_PRINT = "hello world";
+        @Test
+        public void test() {
+            String[] args = {};
+            App.main(args);
+        }
 
-    @Test
-    public void main() {
-        Printer hpPrinter = new HPPrinter();
-        Printer canonPrinter = new CanonPrinter();
-        Printer epsonPrinter = new EpsonPrinter();
-
-        PrinterController hpPrinterController = new PrinterController(hpPrinter);
-        PrinterController canonPrinterController = new PrinterController(canonPrinter);
-        PrinterController epsonPrinterController = new PrinterController(epsonPrinter);
-
-        hpPrinterController.print(MESSAGE_TO_PRINT);
-        canonPrinterController.print(MESSAGE_TO_PRINT);
-        epsonPrinterController.print(MESSAGE_TO_PRINT);
-    }
 }

From a49dbefb56fbb16ef3f181c6e2e09cbe314bc529 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sun, 27 Dec 2015 14:10:49 +0000
Subject: [PATCH 07/13] Add simple tests for delegate pattern #324

---
 delegation/pom.xml                            |  6 +++
 ...er.java => AbstractPrinterController.java} |  4 +-
 .../delegation/simple/PrinterController.java  |  2 +-
 .../delegation/simple/printers/App.java       | 12 ++----
 .../delegation/simple/DelegateTest.java       | 43 +++++++++++++++++++
 5 files changed, 56 insertions(+), 11 deletions(-)
 rename delegation/src/main/java/com/iluwatar/delegation/simple/{Controller.java => AbstractPrinterController.java} (55%)
 create mode 100644 delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java

diff --git a/delegation/pom.xml b/delegation/pom.xml
index 47dbc3844..08b7df748 100644
--- a/delegation/pom.xml
+++ b/delegation/pom.xml
@@ -41,5 +41,11 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.stefanbirkner</groupId>
+            <artifactId>system-rules</artifactId>
+            <version>1.14.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
similarity index 55%
rename from delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
rename to delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
index 487b827eb..e58acd0c3 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
@@ -1,10 +1,10 @@
 package com.iluwatar.delegation.simple;
 
-public abstract class Controller<T extends Printer> {
+public abstract class AbstractPrinterController<T extends Printer> implements Printer{
 
     private Printer printer;
 
-    public Controller(Printer printer) {
+    public AbstractPrinterController(Printer printer) {
         this.printer = printer;
     }
 
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
index 5fb8742a3..f282be128 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
@@ -1,6 +1,6 @@
 package com.iluwatar.delegation.simple;
 
-public class PrinterController extends Controller implements Printer {
+public class PrinterController extends AbstractPrinterController {
 
     public PrinterController(Printer printer) {
         super(printer);
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
index 7668637f7..6dc2e4878 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
@@ -1,6 +1,6 @@
 package com.iluwatar.delegation.simple.printers;
 
-import com.iluwatar.delegation.simple.Printer;
+import com.iluwatar.delegation.simple.AbstractPrinterController;
 import com.iluwatar.delegation.simple.PrinterController;
 
 public class App {
@@ -8,13 +8,9 @@ public class App {
     public static final String MESSAGE_TO_PRINT = "hello world";
 
     public static void main(String[] args) {
-        Printer hpPrinter = new HPPrinter();
-        Printer canonPrinter = new CanonPrinter();
-        Printer epsonPrinter = new EpsonPrinter();
-
-        PrinterController hpPrinterController = new PrinterController(hpPrinter);
-        PrinterController canonPrinterController = new PrinterController(canonPrinter);
-        PrinterController epsonPrinterController = new PrinterController(epsonPrinter);
+        AbstractPrinterController hpPrinterController = new PrinterController(new HPPrinter());
+        AbstractPrinterController canonPrinterController = new PrinterController(new CanonPrinter());
+        AbstractPrinterController epsonPrinterController = new PrinterController(new EpsonPrinter());
 
         hpPrinterController.print(MESSAGE_TO_PRINT);
         canonPrinterController.print(MESSAGE_TO_PRINT);
diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java
new file mode 100644
index 000000000..db8cb4262
--- /dev/null
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java
@@ -0,0 +1,43 @@
+package com.iluwatar.delegation.simple;
+
+import com.iluwatar.delegation.simple.printers.CanonPrinter;
+import com.iluwatar.delegation.simple.printers.EpsonPrinter;
+import com.iluwatar.delegation.simple.printers.HPPrinter;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.SystemOutRule;
+
+import static org.junit.Assert.assertEquals;
+
+public class DelegateTest {
+
+    private static final String MESSAGE = "Test Message Printed";
+
+    @Rule
+    public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
+
+    @Test
+    public void testCanonPrinter() throws Exception {
+        AbstractPrinterController abstractController = new PrinterController(new CanonPrinter());
+        abstractController.print(MESSAGE);
+
+        assertEquals("Canon Printer : Test Message Printed\n", systemOutRule.getLog());
+    }
+
+    @Test
+    public void testHPPrinter() throws Exception {
+        AbstractPrinterController abstractController = new PrinterController(new HPPrinter());
+        abstractController.print(MESSAGE);
+
+        assertEquals("HP Printer : Test Message Printed\n", systemOutRule.getLog());
+    }
+
+    @Test
+    public void testEpsonPrinter() throws Exception {
+        AbstractPrinterController abstractController = new PrinterController(new EpsonPrinter());
+        abstractController.print(MESSAGE);
+
+        assertEquals("Epson Printer : Test Message Printed\n", systemOutRule.getLog());
+    }
+
+}

From 32e71814786c6e92cf8d1fa6a5a0f2c77ee8327a Mon Sep 17 00:00:00 2001
From: Jeroen Meulemeester <jeroen.meulemeester@gmail.com>
Date: Sun, 27 Dec 2015 18:13:34 +0100
Subject: [PATCH 08/13] Generate UML for delegation pattern

---
 delegation/etc/delegation.png  | Bin 0 -> 22795 bytes
 delegation/etc/delegation.ucls |  97 +++++++++++++++++++++++++++++++++
 2 files changed, 97 insertions(+)
 create mode 100644 delegation/etc/delegation.png
 create mode 100644 delegation/etc/delegation.ucls

diff --git a/delegation/etc/delegation.png b/delegation/etc/delegation.png
new file mode 100644
index 0000000000000000000000000000000000000000..95219674d28412546236e608e2a2d581df96e1dc
GIT binary patch
literal 22795
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%0A5arybU1U(0Jr4JF;747Hv
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

literal 0
HcmV?d00001

diff --git a/delegation/etc/delegation.ucls b/delegation/etc/delegation.ucls
new file mode 100644
index 000000000..b55084116
--- /dev/null
+++ b/delegation/etc/delegation.ucls
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<class-diagram version="1.1.9" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true" 
+  realizations="true" associations="true" dependencies="false" nesting-relationships="true" router="FAN">  
+  <interface id="1" language="java" name="com.iluwatar.delegation.simple.Printer" project="delegation" 
+    file="/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java" binary="false" corner="BOTTOM_RIGHT">    
+    <position height="-1" width="-1" x="362" y="84"/>    
+    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
+      <operations public="true" package="true" protected="true" private="true" static="true"/>    
+    </display>  
+  </interface>  
+  <class id="2" language="java" name="com.iluwatar.delegation.simple.AbstractPrinterController" project="delegation" 
+    file="/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="97" width="191" x="41" y="37"/>    
+    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
+      <operations public="true" package="true" protected="true" private="true" static="true"/>    
+    </display>  
+  </class>  
+  <class id="3" language="java" name="com.iluwatar.delegation.simple.PrinterController" project="delegation" 
+    file="/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="-1" width="-1" x="136" y="214"/>    
+    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
+      <operations public="true" package="true" protected="true" private="true" static="true"/>    
+    </display>  
+  </class>  
+  <class id="4" language="java" name="com.iluwatar.delegation.simple.printers.HPPrinter" project="delegation" 
+    file="/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="-1" width="-1" x="187" y="333"/>    
+    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
+      <operations public="true" package="true" protected="true" private="true" static="true"/>    
+    </display>  
+  </class>  
+  <class id="5" language="java" name="com.iluwatar.delegation.simple.printers.EpsonPrinter" project="delegation" 
+    file="/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="-1" width="-1" x="362" y="333"/>    
+    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
+      <operations public="true" package="true" protected="true" private="true" static="true"/>    
+    </display>  
+  </class>  
+  <class id="6" language="java" name="com.iluwatar.delegation.simple.printers.CanonPrinter" project="delegation" 
+    file="/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java" binary="false" 
+    corner="BOTTOM_RIGHT">    
+    <position height="-1" width="-1" x="537" y="333"/>    
+    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+      sort-features="false" accessors="true" visibility="true">      
+      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
+      <operations public="true" package="true" protected="true" private="true" static="true"/>    
+    </display>  
+  </class>  
+  <generalization id="7">    
+    <end type="SOURCE" refId="3"/>    
+    <end type="TARGET" refId="2"/>  
+  </generalization>  
+  <realization id="8">    
+    <end type="SOURCE" refId="5"/>    
+    <end type="TARGET" refId="1"/>  
+  </realization>  
+  <realization id="9">    
+    <end type="SOURCE" refId="4"/>    
+    <end type="TARGET" refId="1"/>  
+  </realization>  
+  <association id="10">    
+    <end type="SOURCE" refId="2" navigable="false">      
+      <attribute id="11" name="printer"/>      
+      <multiplicity id="12" minimum="0" maximum="1"/>    
+    </end>    
+    <end type="TARGET" refId="1" navigable="true"/>    
+    <display labels="true" multiplicity="true"/>  
+  </association>  
+  <realization id="13">    
+    <end type="SOURCE" refId="6"/>    
+    <end type="TARGET" refId="1"/>  
+  </realization>  
+  <realization id="14">    
+    <end type="SOURCE" refId="2"/>    
+    <end type="TARGET" refId="1"/>  
+  </realization>  
+  <classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
+    sort-features="false" accessors="true" visibility="true">    
+    <attributes public="true" package="true" protected="true" private="true" static="true"/>    
+    <operations public="true" package="true" protected="true" private="true" static="true"/>  
+  </classifier-display>  
+  <association-display labels="true" multiplicity="true"/>
+</class-diagram>
\ No newline at end of file

From 982f9f5e31ac20796b609bbb14202d3ef7454491 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sun, 27 Dec 2015 20:09:33 +0000
Subject: [PATCH 09/13] Generic For AbstractPrinterController #324

---
 .../delegation/simple/AbstractPrinterController.java        | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
index e58acd0c3..22a126948 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
@@ -2,13 +2,13 @@ package com.iluwatar.delegation.simple;
 
 public abstract class AbstractPrinterController<T extends Printer> implements Printer{
 
-    private Printer printer;
+    private T printer;
 
-    public AbstractPrinterController(Printer printer) {
+    public AbstractPrinterController(T printer) {
         this.printer = printer;
     }
 
-    protected Printer getPrinter() {
+    protected T getPrinter() {
         return printer;
     }
 }

From fac10dc454650a71b4699d1aa54594511e5ca1e0 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sun, 27 Dec 2015 20:10:48 +0000
Subject: [PATCH 10/13] Move App.java to correct Package #324

---
 .../com/iluwatar/delegation/simple/{printers => }/App.java | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
 rename delegation/src/main/java/com/iluwatar/delegation/simple/{printers => }/App.java (73%)

diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java b/delegation/src/main/java/com/iluwatar/delegation/simple/App.java
similarity index 73%
rename from delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
rename to delegation/src/main/java/com/iluwatar/delegation/simple/App.java
index 6dc2e4878..87ef8cdb4 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/App.java
@@ -1,7 +1,8 @@
-package com.iluwatar.delegation.simple.printers;
+package com.iluwatar.delegation.simple;
 
-import com.iluwatar.delegation.simple.AbstractPrinterController;
-import com.iluwatar.delegation.simple.PrinterController;
+import com.iluwatar.delegation.simple.printers.CanonPrinter;
+import com.iluwatar.delegation.simple.printers.EpsonPrinter;
+import com.iluwatar.delegation.simple.printers.HPPrinter;
 
 public class App {
 

From 483db04cef5bf52671c0585248c42b2fb5b9bd03 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Sun, 27 Dec 2015 20:12:04 +0000
Subject: [PATCH 11/13] Move App.java to correct Package #324

---
 .../src/test/java/com/iluwatar/delegation/simple/AppTest.java    | 1 -
 1 file changed, 1 deletion(-)

diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
index 545f62d12..783a1a8ed 100644
--- a/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
@@ -1,6 +1,5 @@
 package com.iluwatar.delegation.simple;
 
-import com.iluwatar.delegation.simple.printers.App;
 import org.junit.Test;
 
 public class AppTest {

From 6d516d512435ee6a1c41cf34253012053800fece Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Mon, 28 Dec 2015 18:16:58 +0000
Subject: [PATCH 12/13] Populate the index.md for the delegate module #324

---
 delegation/index.md | 40 +++++++++++++++++++---------------------
 1 file changed, 19 insertions(+), 21 deletions(-)

diff --git a/delegation/index.md b/delegation/index.md
index a36821668..ad0bc6843 100644
--- a/delegation/index.md
+++ b/delegation/index.md
@@ -1,28 +1,26 @@
---- # this is so called 'Yaml Front Matter', read up on it here: http://jekyllrb.com/docs/frontmatter/
-layout: pattern # layout must allways be pattern
-title: Best Pattern Ever # the properly formatted title
-folder: best-pattern-ever # the folder name in which this pattern lies
-permalink: /patterns/best-pattern-ever/ # the permalink to the pattern, to keep this uniform please stick to /patterns/FOLDER/
-
-# both categories and tags are Yaml Lists
-# you can either just pick one or write a list with '-'s
-# usable categories and tags are listed here: https://github.com/iluwatar/java-design-patterns/blob/gh-pages/_config.yml
-categories: creational # categories of the pattern
-tags: # tags of the pattern
- - best
- - ever
- - awesome
+---
+layout: pattern
+title: Delegation
+folder: delegation
+permalink: /patterns/delegation/
+categories: Behavioral
+tags:
+ - Java
+ - Difficulty-Beginner
 ---
 
-**Intent:** Makes your code awesome
+**Also known as:** Proxy Chains
 
-![alt text](./etc/best_pattern.png "Best Pattern Ever")
+**Intent:** It is a technique where an object expresses certain behavior to the outside but in 
+reality delegates responsibility for implementing that behaviour to an associated object. 
 
-**Applicability:** Use the Best Pattern Ever pattern when
+![alt text](./etc/delegation.png "Delegate")
 
-* you want to be the best
-* you need to ...
+**Applicability:** Use the Delegate pattern in order to achieve the following
 
-**Real world examples:**
+* Reduce the coupling of methods to their class
+* Components that behave identically, but realize that this situation can change in the future.
 
-* [Nowhere](http://no.where.com)
\ No newline at end of file
+**Credits**
+
+* [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)

From c842f88eb74e12a4bb79cb7daee7c93d82744582 Mon Sep 17 00:00:00 2001
From: Joseph McCarthy <luckymikuhatsune@gmail.com>
Date: Mon, 28 Dec 2015 19:23:00 +0000
Subject: [PATCH 13/13] Add java documentation #324

---
 .../simple/AbstractPrinterController.java     | 22 ++++++++++++++++++-
 .../com/iluwatar/delegation/simple/App.java   | 12 ++++++++++
 .../iluwatar/delegation/simple/Printer.java   | 14 ++++++++++++
 .../delegation/simple/PrinterController.java  |  8 +++++++
 .../simple/printers/CanonPrinter.java         |  9 ++++++++
 .../simple/printers/EpsonPrinter.java         |  9 ++++++++
 .../delegation/simple/printers/HPPrinter.java |  9 ++++++++
 7 files changed, 82 insertions(+), 1 deletion(-)

diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
index 22a126948..679c1a3a6 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
@@ -1,13 +1,33 @@
 package com.iluwatar.delegation.simple;
 
-public abstract class AbstractPrinterController<T extends Printer> implements Printer{
+/**
+ * Extra layer of abstraction for the controller to allow the controller in this example {@link PrinterController} to
+ * be as clean as possible. This just provides the default constructor and a simple getter method. The generic of T allows
+ * any implementation of {@link Printer}
+ *
+ * @param <T> Printer
+ * @see Printer
+ * @see PrinterController
+ */
+public abstract class AbstractPrinterController<T extends Printer> implements Printer {
+
 
     private T printer;
 
+    /**
+     * @param printer instance of T {@link Printer} this instance is the delegate
+     */
     public AbstractPrinterController(T printer) {
         this.printer = printer;
     }
 
+    /**
+     * Helper method to return the current instance of T {@link Printer} in order for
+     * the controller to call operations on the {@link Printer}
+     *
+     * @return instance of Printer
+     * @see Printer
+     */
     protected T getPrinter() {
         return printer;
     }
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/App.java b/delegation/src/main/java/com/iluwatar/delegation/simple/App.java
index 87ef8cdb4..47cf27e8e 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/App.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/App.java
@@ -4,10 +4,22 @@ import com.iluwatar.delegation.simple.printers.CanonPrinter;
 import com.iluwatar.delegation.simple.printers.EpsonPrinter;
 import com.iluwatar.delegation.simple.printers.HPPrinter;
 
+/**
+ * In this example the delegates are {@link EpsonPrinter}, {@link HPPrinter} and {@link CanonPrinter} they all implement
+ * {@link Printer}. The {@link AbstractPrinterController} and through inheritance {@link PrinterController} also implement
+ * {@link Printer}. However neither provide the functionality of {@link Printer} by printing to the screen, they actually
+ * call upon the instance of {@link Printer} that they were instantiated with. Therefore delegating the behaviour to
+ * another class.
+ */
 public class App {
 
     public static final String MESSAGE_TO_PRINT = "hello world";
 
+    /**
+     * Program entry point
+     *
+     * @param args command line args
+     */
     public static void main(String[] args) {
         AbstractPrinterController hpPrinterController = new PrinterController(new HPPrinter());
         AbstractPrinterController canonPrinterController = new PrinterController(new CanonPrinter());
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java b/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
index 1bc0dd13d..aa3bebfda 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
@@ -1,6 +1,20 @@
 package com.iluwatar.delegation.simple;
 
+/**
+ *  Interface that both the Controller and the Delegate will implement.
+ *
+ *  @see com.iluwatar.delegation.simple.printers.CanonPrinter
+ *  @see com.iluwatar.delegation.simple.printers.EpsonPrinter
+ *  @see com.iluwatar.delegation.simple.printers.HPPrinter
+ *  @see AbstractPrinterController
+ */
 public interface Printer {
 
+    /**
+     * Method that takes a String to print to the screen. This will be implemented on both the
+     * controller and the delegate allowing the controller to call the same method on the delegate class.
+     *
+     * @param message to be printed to the screen
+     */
     void print(final String message);
 }
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
index f282be128..98be53a2b 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
@@ -6,6 +6,14 @@ public class PrinterController extends AbstractPrinterController {
         super(printer);
     }
 
+    /**
+     * This method is implemented from {@link Printer} however instead on providing an
+     * implementation, it instead calls upon the class passed through the constructor. This is the delegate,
+     * hence the pattern. Therefore meaning that the caller does not care of the implementing class only the owning
+     * controller.
+     *
+     * @param message to be printed to the screen
+     */
     @Override
     public void print(String message) {
         getPrinter().print(message);
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
index 76afd5309..a55e1984d 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
@@ -2,8 +2,17 @@ package com.iluwatar.delegation.simple.printers;
 
 import com.iluwatar.delegation.simple.Printer;
 
+/**
+ * Specialised Implementation of {@link Printer} for a Canon Printer, in
+ * this case the message to be printed is appended to "Canon Printer : "
+ *
+ * @see Printer
+ */
 public class CanonPrinter implements Printer {
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void print(String message) {
         System.out.println("Canon Printer : " + message);
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
index cc371fd68..bc53e2cae 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
@@ -2,8 +2,17 @@ package com.iluwatar.delegation.simple.printers;
 
 import com.iluwatar.delegation.simple.Printer;
 
+/**
+ * Specialised Implementation of {@link Printer} for a Epson Printer, in
+ * this case the message to be printed is appended to "Epson Printer : "
+ *
+ * @see Printer
+ */
 public class EpsonPrinter implements Printer{
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void print(String message) {
         System.out.println("Epson Printer : " + message);
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java
index 7c57ee43b..e801ecdf0 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/HPPrinter.java
@@ -2,8 +2,17 @@ package com.iluwatar.delegation.simple.printers;
 
 import com.iluwatar.delegation.simple.Printer;
 
+/**
+ * Specialised Implementation of {@link Printer} for a HP Printer, in
+ * this case the message to be printed is appended to "HP Printer : "
+ *
+ * @see Printer
+ */
 public class HPPrinter implements Printer {
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void print(String message) {
         System.out.println("HP Printer : " + message);