Merge pull request #377 from iluwatar/FactoryMethodChanges
Factory and Abstract Factory changes
This commit is contained in:
		@@ -52,14 +52,6 @@ public class App {
 | 
			
		||||
    setArmy(factory.createArmy());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ElfKingdomFactory getElfKingdomFactory() {
 | 
			
		||||
    return new ElfKingdomFactory();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  OrcKingdomFactory getOrcKingdomFactory() {
 | 
			
		||||
    return new OrcKingdomFactory();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  King getKing(final KingdomFactory factory) {
 | 
			
		||||
    return factory.createKing();
 | 
			
		||||
  }
 | 
			
		||||
@@ -107,17 +99,13 @@ public class App {
 | 
			
		||||
    App app = new App();
 | 
			
		||||
 | 
			
		||||
    System.out.println("Elf Kingdom");
 | 
			
		||||
    KingdomFactory elfKingdomFactory;
 | 
			
		||||
    elfKingdomFactory = app.getElfKingdomFactory();
 | 
			
		||||
    app.createKingdom(elfKingdomFactory);
 | 
			
		||||
    app.createKingdom(new ElfKingdomFactory());
 | 
			
		||||
    System.out.println(app.getArmy().getDescription());
 | 
			
		||||
    System.out.println(app.getCastle().getDescription());
 | 
			
		||||
    System.out.println(app.getKing().getDescription());
 | 
			
		||||
 | 
			
		||||
    System.out.println("\nOrc Kingdom");
 | 
			
		||||
    KingdomFactory orcKingdomFactory;
 | 
			
		||||
    orcKingdomFactory = app.getOrcKingdomFactory();
 | 
			
		||||
    app.createKingdom(orcKingdomFactory);
 | 
			
		||||
    app.createKingdom(new OrcKingdomFactory());
 | 
			
		||||
    System.out.println(app.getArmy().getDescription());
 | 
			
		||||
    System.out.println(app.getCastle().getDescription());
 | 
			
		||||
    System.out.println(app.getKing().getDescription());
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,8 @@ public class AbstractFactoryTest {
 | 
			
		||||
 | 
			
		||||
  @Before
 | 
			
		||||
  public void setUp() {
 | 
			
		||||
    elfFactory = app.getElfKingdomFactory();
 | 
			
		||||
    orcFactory = app.getOrcKingdomFactory();
 | 
			
		||||
    elfFactory = new ElfKingdomFactory();
 | 
			
		||||
    orcFactory = new OrcKingdomFactory();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
 
 | 
			
		||||
@@ -38,25 +38,40 @@ package com.iluwatar.factory.method;
 | 
			
		||||
 */
 | 
			
		||||
public class App {
 | 
			
		||||
 | 
			
		||||
  private final Blacksmith blacksmith;
 | 
			
		||||
  
 | 
			
		||||
  /**
 | 
			
		||||
   * Creates an instance of <code>App</code> which will use <code>blacksmith</code> to manufacture 
 | 
			
		||||
   * the weapons for war.
 | 
			
		||||
   * <code>App</code> 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 a non-null implementation of 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);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user