【设计模式】之 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(); } }}