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