您的位置:首页 > 其它

【设计模式】之 Abstract Factory 抽象工厂

2012-03-02 16:05 127 查看
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();

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: