Factory Method Pattern

Pros

  • The client does not need to know how to create the class that it needs
  • The client does not need to even know what concrete class it actually wants

Cons

  • Increases complexity

Example Explanation

Client - Uses an IFactory to create an abstract Monster

MonsterFactory - creates an abstract Monster

class Main
{

  public static void main(String[] args)
  {
    IFactory mobFactory = new MonsterFactory();

    Monster mob1 = mobFactory.createMonster("Zombie");
    mob1.flee();
    //Zombie staggers away.

    Monster mob2 = mobFactory.createMonster("Harpy");
    mob2.flee();
    //Harpy flies away.
  }
}

interface IFactory{
  public Monster createMonster(String name);
}

class MonsterFactory implements IFactory
{
  public Monster createMonster(String name)
  {
    Monster mon = null;
    switch(name)
    {
      case "Harpy": mon = new Harpy(name); break;

      case "Zombie": mon = new Zombie(name); break;

      default:
      {
        throw new java.lang.RuntimeException("Monster name not found");
      }
    }

    return mon;
  }
}

abstract class Monster {

  protected String name;

  public Monster(String name){ this.name = name; }

  public abstract void flee();

  @Override
  public String toString(){ return name; }
}

class Harpy extends Monster
{
  public Harpy(String name)
  {
    super(name);
  }

  @Override
  public void flee()
  {
    System.out.println(name+" flies away.");
  }
}

class Zombie extends Monster
{
  public Zombie(String name)
  {
    super(name);
  }

  @Override
  public void flee()
  {
    System.out.println(name+" staggers away.");
  }
}

Extra Resources

http://www.oodesign.com/factory-method-pattern.html

results matching ""

    No results matching ""