using System; using System.Collections.Generic; using System.Text; namespace 抽象工厂_练习 { //抽象工厂类 abstract class ContinentFactory//抽象类 { abstract public Herbivore CreateHerbivore();//抽象方法 abstract public Carnivore CreateCarnivore(); } //工厂1 class AfricaFactory : ContinentFactory { override public Herbivore CreateHerbivore() { return new Wildebeest(); } public override Carnivore CreateCarnivore() { return new Lion(); } } //工厂2 class AmericaFactory : ContinentFactory { override public 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 { override public void Eat(Herbivore h) { Console.WriteLine("非洲: " + this + " 吃 " + h + "n");//this和h自动输出类名 } } class Bison : Herbivore { } class Wolf : Carnivore { override public void Eat(Herbivore h) { Console.WriteLine("美洲: " + this.ToString() + " 吃 " + h.ToString() + "n"); } } 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 Program { static void Main(string[] args) { ContinentFactory africa = new AfricaFactory();//抽象类ContinentFactory不能实例化 AnimalWorld world = new AnimalWorld(africa); world.RunFoodChain(); ContinentFactory america = new AmericaFactory(); world = new AnimalWorld(america); world.RunFoodChain(); Console.ReadLine(); } } }