From 4ae82e4302ce531206572465a166cfdaa14ae901 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Sun, 10 Aug 2014 22:55:58 +0300 Subject: [PATCH] added prototype sample --- pom.xml | 1 + prototype/pom.xml | 23 +++++++++++ prototype/src/main/java/com/iluwatar/App.java | 28 +++++++++++++ .../src/main/java/com/iluwatar/Beast.java | 8 ++++ .../src/main/java/com/iluwatar/ElfBeast.java | 21 ++++++++++ .../src/main/java/com/iluwatar/ElfMage.java | 21 ++++++++++ .../main/java/com/iluwatar/ElfWarlord.java | 21 ++++++++++ .../main/java/com/iluwatar/HeroFactory.java | 11 ++++++ .../java/com/iluwatar/HeroFactoryImpl.java | 39 +++++++++++++++++++ .../src/main/java/com/iluwatar/Mage.java | 8 ++++ .../src/main/java/com/iluwatar/OrcBeast.java | 21 ++++++++++ .../src/main/java/com/iluwatar/OrcMage.java | 21 ++++++++++ .../main/java/com/iluwatar/OrcWarlord.java | 21 ++++++++++ .../src/main/java/com/iluwatar/Prototype.java | 8 ++++ .../src/main/java/com/iluwatar/Warlord.java | 8 ++++ 15 files changed, 260 insertions(+) create mode 100644 prototype/pom.xml create mode 100644 prototype/src/main/java/com/iluwatar/App.java create mode 100644 prototype/src/main/java/com/iluwatar/Beast.java create mode 100644 prototype/src/main/java/com/iluwatar/ElfBeast.java create mode 100644 prototype/src/main/java/com/iluwatar/ElfMage.java create mode 100644 prototype/src/main/java/com/iluwatar/ElfWarlord.java create mode 100644 prototype/src/main/java/com/iluwatar/HeroFactory.java create mode 100644 prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java create mode 100644 prototype/src/main/java/com/iluwatar/Mage.java create mode 100644 prototype/src/main/java/com/iluwatar/OrcBeast.java create mode 100644 prototype/src/main/java/com/iluwatar/OrcMage.java create mode 100644 prototype/src/main/java/com/iluwatar/OrcWarlord.java create mode 100644 prototype/src/main/java/com/iluwatar/Prototype.java create mode 100644 prototype/src/main/java/com/iluwatar/Warlord.java diff --git a/pom.xml b/pom.xml index ade6285aa..88e3cdfab 100644 --- a/pom.xml +++ b/pom.xml @@ -21,5 +21,6 @@ abstract-factory builder factory-method + prototype \ No newline at end of file diff --git a/prototype/pom.xml b/prototype/pom.xml new file mode 100644 index 000000000..5f25ca866 --- /dev/null +++ b/prototype/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + prototype + 1.0-SNAPSHOT + prototype + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/prototype/src/main/java/com/iluwatar/App.java b/prototype/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..e94c834e3 --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/App.java @@ -0,0 +1,28 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + HeroFactory factory; + Mage mage; + Warlord warlord; + Beast beast; + + factory = new HeroFactoryImpl(new ElfMage(), new ElfWarlord(), new ElfBeast()); + mage = factory.createMage(); + warlord = factory.createWarlord(); + beast = factory.createBeast(); + System.out.println(mage); + System.out.println(warlord); + System.out.println(beast); + + factory = new HeroFactoryImpl(new OrcMage(), new OrcWarlord(), new OrcBeast()); + mage = factory.createMage(); + warlord = factory.createWarlord(); + beast = factory.createBeast(); + System.out.println(mage); + System.out.println(warlord); + System.out.println(beast); + } +} diff --git a/prototype/src/main/java/com/iluwatar/Beast.java b/prototype/src/main/java/com/iluwatar/Beast.java new file mode 100644 index 000000000..2d1e978c0 --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/Beast.java @@ -0,0 +1,8 @@ +package com.iluwatar; + +public abstract class Beast extends Prototype { + + @Override + public abstract Beast clone() throws CloneNotSupportedException; + +} diff --git a/prototype/src/main/java/com/iluwatar/ElfBeast.java b/prototype/src/main/java/com/iluwatar/ElfBeast.java new file mode 100644 index 000000000..40fac06b8 --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/ElfBeast.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class ElfBeast extends Beast { + + public ElfBeast() { + } + + public ElfBeast(ElfBeast beast) { + } + + @Override + public Beast clone() throws CloneNotSupportedException { + return new ElfBeast(this); + } + + @Override + public String toString() { + return "Elven eagle"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/ElfMage.java b/prototype/src/main/java/com/iluwatar/ElfMage.java new file mode 100644 index 000000000..52919c91d --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/ElfMage.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class ElfMage extends Mage { + + public ElfMage() { + } + + public ElfMage(ElfMage mage) { + } + + @Override + public Mage clone() throws CloneNotSupportedException { + return new ElfMage(this); + } + + @Override + public String toString() { + return "Elven mage"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/ElfWarlord.java b/prototype/src/main/java/com/iluwatar/ElfWarlord.java new file mode 100644 index 000000000..51c52afdc --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/ElfWarlord.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class ElfWarlord extends Warlord { + + public ElfWarlord() { + } + + public ElfWarlord(ElfWarlord warlord) { + } + + @Override + public Warlord clone() throws CloneNotSupportedException { + return new ElfWarlord(this); + } + + @Override + public String toString() { + return "Elven warlord"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/HeroFactory.java b/prototype/src/main/java/com/iluwatar/HeroFactory.java new file mode 100644 index 000000000..1d663c77f --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/HeroFactory.java @@ -0,0 +1,11 @@ +package com.iluwatar; + +public interface HeroFactory { + + Mage createMage(); + + Warlord createWarlord(); + + Beast createBeast(); + +} diff --git a/prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java b/prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java new file mode 100644 index 000000000..522b3f45f --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java @@ -0,0 +1,39 @@ +package com.iluwatar; + +public class HeroFactoryImpl implements HeroFactory { + + private Mage mage; + private Warlord warlord; + private Beast beast; + + public HeroFactoryImpl(Mage mage, Warlord warlord, Beast beast) { + this.mage = mage; + this.warlord = warlord; + this.beast = beast; + } + + public Mage createMage() { + try { + return mage.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + + public Warlord createWarlord() { + try { + return warlord.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + + public Beast createBeast() { + try { + return beast.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + +} diff --git a/prototype/src/main/java/com/iluwatar/Mage.java b/prototype/src/main/java/com/iluwatar/Mage.java new file mode 100644 index 000000000..726150633 --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/Mage.java @@ -0,0 +1,8 @@ +package com.iluwatar; + +public abstract class Mage extends Prototype { + + @Override + public abstract Mage clone() throws CloneNotSupportedException; + +} diff --git a/prototype/src/main/java/com/iluwatar/OrcBeast.java b/prototype/src/main/java/com/iluwatar/OrcBeast.java new file mode 100644 index 000000000..a5f52232c --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/OrcBeast.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class OrcBeast extends Beast { + + public OrcBeast() { + } + + public OrcBeast(OrcBeast beast) { + } + + @Override + public Beast clone() throws CloneNotSupportedException { + return new OrcBeast(this); + } + + @Override + public String toString() { + return "Orcish wolf"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/OrcMage.java b/prototype/src/main/java/com/iluwatar/OrcMage.java new file mode 100644 index 000000000..88e7718ac --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/OrcMage.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class OrcMage extends Mage { + + public OrcMage() { + } + + public OrcMage(OrcMage mage) { + } + + @Override + public Mage clone() throws CloneNotSupportedException { + return new OrcMage(this); + } + + @Override + public String toString() { + return "Orcish mage"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/OrcWarlord.java b/prototype/src/main/java/com/iluwatar/OrcWarlord.java new file mode 100644 index 000000000..62ab25975 --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/OrcWarlord.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class OrcWarlord extends Warlord { + + public OrcWarlord() { + } + + public OrcWarlord(OrcWarlord warlord) { + } + + @Override + public Warlord clone() throws CloneNotSupportedException { + return new OrcWarlord(this); + } + + @Override + public String toString() { + return "Orcish warlord"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/Prototype.java b/prototype/src/main/java/com/iluwatar/Prototype.java new file mode 100644 index 000000000..e508aea6e --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/Prototype.java @@ -0,0 +1,8 @@ +package com.iluwatar; + +public abstract class Prototype implements Cloneable { + + @Override + public abstract Object clone() throws CloneNotSupportedException; + +} diff --git a/prototype/src/main/java/com/iluwatar/Warlord.java b/prototype/src/main/java/com/iluwatar/Warlord.java new file mode 100644 index 000000000..4ddcdd251 --- /dev/null +++ b/prototype/src/main/java/com/iluwatar/Warlord.java @@ -0,0 +1,8 @@ +package com.iluwatar; + +public abstract class Warlord extends Prototype { + + @Override + public abstract Warlord clone() throws CloneNotSupportedException; + +}