public static void Main()
ContinentFactory africa = new AfricaFactory();
AnimalWorld world = new AnimalWorld(africa);
public class Wildebeest : Herbivore
public class Lion : Carnivore
public override void Eat(Herbivore h)
Console.WriteLine(this.GetType().Name +
" eats " + h.GetType().Name);
private Herbivore _herbivore;
private Carnivore _carnivore;
public AnimalWorld(ContinentFactory factory)
_carnivore = factory.CreateCarnivore();
_herbivore = factory.CreateHerbivore();
public void RunFoodChain()
_carnivore.Eat(_herbivore);
public class AfricaFactory : ContinentFactory
public override Herbivore CreateHerbivore()
public override Carnivore CreateCarnivore()
public abstract class Herbivore
public abstract class Carnivore
public abstract void Eat(Herbivore h);
public abstract class ContinentFactory
public abstract Herbivore CreateHerbivore();
public abstract Carnivore CreateCarnivore();