diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/App.java b/factory-method/src/main/java/com/iluwatar/factory/method/App.java
index 4056f335c..32b9c82f2 100644
--- a/factory-method/src/main/java/com/iluwatar/factory/method/App.java
+++ b/factory-method/src/main/java/com/iluwatar/factory/method/App.java
@@ -38,25 +38,40 @@ package com.iluwatar.factory.method;
*/
public class App {
+ private final Blacksmith blacksmith;
+
+ /**
+ * Creates an instance of App
which will use blacksmith
to manufacture
+ * the weapons for war.
+ * App
is unaware which concrete implementation of {@link Blacksmith} it is using.
+ * The decision of which blacksmith implementation to use may depend on configuration, or
+ * the type of rival in war.
+ * @param blacksmith
+ */
+ public App(Blacksmith blacksmith) {
+ this.blacksmith = blacksmith;
+ }
+
/**
* Program entry point
*
* @param args command line args
*/
public static void main(String[] args) {
- Blacksmith blacksmith;
+ // Lets go to war with Orc weapons
+ App app = new App(new OrcBlacksmith());
+ app.manufactureWeapons();
+
+ // Lets go to war with Elf weapons
+ app = new App(new ElfBlacksmith());
+ app.manufactureWeapons();
+ }
+
+ private void manufactureWeapons() {
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/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java
index 40515d4c9..2f8d1c9bb 100644
--- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java
+++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java
@@ -93,7 +93,7 @@ public class FactoryMethodTest {
* @param expectedWeaponType expected WeaponType of the weapon
* @param clazz expected class of the weapon
*/
- private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) {
+ private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class> clazz) {
assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon));
assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType,
weapon.getWeaponType());