diff --git a/factory-method/pom.xml b/factory-method/pom.xml new file mode 100644 index 000000000..5cb761d7a --- /dev/null +++ b/factory-method/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + factory-method + 1.0-SNAPSHOT + factory-method + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/factory-method/src/main/java/com/iluwatar/App.java b/factory-method/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..6b19c5f7e --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/App.java @@ -0,0 +1,22 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + Blacksmith blacksmith; + Weapon weapon; + + blacksmith = new OrcBlacksmith(); + weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + System.out.println(weapon); + weapon = blacksmith.manufactureWeapon(WeaponType.AXE); + System.out.println(weapon); + + blacksmith = new ElfBlacksmith(); + weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); + System.out.println(weapon); + weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + System.out.println(weapon); + } +} diff --git a/factory-method/src/main/java/com/iluwatar/Blacksmith.java b/factory-method/src/main/java/com/iluwatar/Blacksmith.java new file mode 100644 index 000000000..fad8382a8 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/Blacksmith.java @@ -0,0 +1,7 @@ +package com.iluwatar; + +public interface Blacksmith { + + Weapon manufactureWeapon(WeaponType weaponType); + +} diff --git a/factory-method/src/main/java/com/iluwatar/ElfBlacksmith.java b/factory-method/src/main/java/com/iluwatar/ElfBlacksmith.java new file mode 100644 index 000000000..606c913a8 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/ElfBlacksmith.java @@ -0,0 +1,9 @@ +package com.iluwatar; + +public class ElfBlacksmith implements Blacksmith { + + public Weapon manufactureWeapon(WeaponType weaponType) { + return new ElfWeapon(weaponType); + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/ElfWeapon.java b/factory-method/src/main/java/com/iluwatar/ElfWeapon.java new file mode 100644 index 000000000..f1c3e6d5c --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/ElfWeapon.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +public class ElfWeapon implements Weapon { + + private WeaponType weaponType; + + public ElfWeapon(WeaponType weaponType) { + this.weaponType = weaponType; + } + + @Override + public String toString() { + return "Elven " + weaponType; + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/OrcBlacksmith.java b/factory-method/src/main/java/com/iluwatar/OrcBlacksmith.java new file mode 100644 index 000000000..a99a9b5a5 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/OrcBlacksmith.java @@ -0,0 +1,9 @@ +package com.iluwatar; + +public class OrcBlacksmith implements Blacksmith { + + public Weapon manufactureWeapon(WeaponType weaponType) { + return new OrcWeapon(weaponType); + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/OrcWeapon.java b/factory-method/src/main/java/com/iluwatar/OrcWeapon.java new file mode 100644 index 000000000..5ad590158 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/OrcWeapon.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +public class OrcWeapon implements Weapon { + + private WeaponType weaponType; + + public OrcWeapon(WeaponType weaponType) { + this.weaponType = weaponType; + } + + @Override + public String toString() { + return "Orcish " + weaponType; + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/Weapon.java b/factory-method/src/main/java/com/iluwatar/Weapon.java new file mode 100644 index 000000000..0787c38f3 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/Weapon.java @@ -0,0 +1,5 @@ +package com.iluwatar; + +public interface Weapon { + +} diff --git a/factory-method/src/main/java/com/iluwatar/WeaponType.java b/factory-method/src/main/java/com/iluwatar/WeaponType.java new file mode 100644 index 000000000..72e01d82c --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/WeaponType.java @@ -0,0 +1,19 @@ +package com.iluwatar; + +public enum WeaponType { + + SHORT_SWORD, SPEAR, AXE; + + @Override + public String toString() { + String s = ""; + switch(this) { + case SHORT_SWORD: s = "short sword"; break; + case SPEAR: s = "spear"; break; + case AXE: s = "axe"; break; + } + return s; + } + + +} diff --git a/pom.xml b/pom.xml index c0df9ddaa..bdcc75df8 100644 --- a/pom.xml +++ b/pom.xml @@ -20,5 +20,7 @@ abstract-factory builder + factory-method + shared \ No newline at end of file