using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignFactory.AbstractFactory
{
/// <summary>
/// Herbivore: 草食动物
/// Carnivore: 食肉动物
/// Bison : 美洲或者欧洲的野牛
/// </summary>
abstract class ContinentFactory
{
abstract public Herbivore CreateHerbivore();
abstract public Carnivore CreateCarnivore();
}
class AfricaFactory : ContinentFactory
{
public override Herbivore CreateHerbivore()
{
return new Wildebeest();
}
public override Carnivore CreateCarnivore()
{
return new Lion();
}
}
class AmericalFactory : ContinentFactory
{
public override Herbivore CreateHerbivore()
{
return new Bison();
}
public override Carnivore CreateCarnivore()
{
return new Wolf();
}
}
abstract class Herbivore
{ }
abstract class Carnivore
{
abstract public void Eat(Herbivore h);
}
class Wildebeest : Herbivore
{ }
class Lion : Carnivore
{
public override void Eat(Herbivore h)
{
Console.WriteLine(this + "eats" + h);
}
}
class Bison : Herbivore
{
}
class Wolf : Carnivore
{
public override void Eat(Herbivore h)
{
Console.WriteLine(this + "eats" + h);
}
}
class AnimalWorld
{
private Herbivore herbivore;
private Carnivore carnivore;
public AnimalWorld(ContinentFactory factory)
{
carnivore = factory.CreateCarnivore();
herbivore = factory.CreateHerbivore();
}
public void RunFoodChain()
{
carnivore.Eat(herbivore);
}
}
class GameApp
{
public static void Main(string[] args)
{
ContinentFactory africa = new AfricaFactory();
AnimalWorld world = new AnimalWorld(africa);
world.RunFoodChain();
ContinentFactory america = new AmericalFactory();
world = new AnimalWorld(america);
world.RunFoodChain();
}
}
}