diff --git a/factory-method/README.md b/factory-method/README.md index 087221fb9..31e2ab98b 100644 --- a/factory-method/README.md +++ b/factory-method/README.md @@ -42,13 +42,13 @@ public interface Blacksmith { public class ElfBlacksmith implements Blacksmith { public Weapon manufactureWeapon(WeaponType weaponType) { - return new ElfWeapon(weaponType); + return ELFARSENAL.get(weaponType); } } public class OrcBlacksmith implements Blacksmith { public Weapon manufactureWeapon(WeaponType weaponType) { - return new OrcWeapon(weaponType); + return ORCARSENAL.get(weaponType); } } ``` diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java index adae5bd50..eccff10d9 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java @@ -23,6 +23,9 @@ package com.iluwatar.factory.method; +import java.util.HashMap; +import java.util.Map; + /** * * Concrete subclass for creating new objects. @@ -30,9 +33,17 @@ package com.iluwatar.factory.method; */ public class ElfBlacksmith implements Blacksmith { + private static Map ELFARSENAL; + static { + ELFARSENAL= new HashMap<>(WeaponType.values().length); + for (WeaponType type : WeaponType.values()) { + ELFARSENAL.put(type, new ElfWeapon(type)); + } + } + @Override public Weapon manufactureWeapon(WeaponType weaponType) { - return new ElfWeapon(weaponType); + return ELFARSENAL.get(weaponType); } - + } diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java index a2a86fe44..673663049 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java @@ -23,6 +23,9 @@ package com.iluwatar.factory.method; +import java.util.HashMap; +import java.util.Map; + /** * * Concrete subclass for creating new objects. @@ -30,8 +33,16 @@ package com.iluwatar.factory.method; */ public class OrcBlacksmith implements Blacksmith { + private static Map ORCARSENAL; + static { + ORCARSENAL= new HashMap<>(WeaponType.values().length); + for (WeaponType type : WeaponType.values()) { + ORCARSENAL.put(type, new OrcWeapon(type)); + } + } + @Override public Weapon manufactureWeapon(WeaponType weaponType) { - return new OrcWeapon(weaponType); + return ORCARSENAL.get(weaponType); } }