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

来源:互联网 发布:网络音频服务器 编辑:程序博客网 时间:2024/05/14 06:36
 
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();        }    }}

原创粉丝点击