抽象工厂模式(Abstract Factory)示例源码

* 模式分析
  在以下情况下应当考虑使用抽象工厂模式
  ~ 一个系统不应当依赖于产品类实例如何被创建,组合和表达的细节,这对于所有形态的
     工厂模式都是重要的
  ~ 一个系统有多于一个的产品族,而系统只消费其中一产品族.
  ~ 同属于一个产品族的产品是在一起使用的.这一约束必须在系统的设计中体现出来.
  ~ 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现.
 * 源码分析
   控制台程序 Program.cs

  1   using System;
  2   using System.Collections.Generic;
  3   using System.Text;
  4/*该源码由邹江平2008-8-14编写,如有学习者请与QQ:200580231联系*/
  5namespace X8023Z
  6{
  7    class Program
  8    {
  9        static void Main(string[] args)
 10        {
 11            // 创建并运行非洲动物世界。
 12            ContinentFactory africa = new AfricaFactory();
 13            AnimalWorld world = new AnimalWorld(africa);
 14            world.RunFoodChain();
 15
 16            // 创建并运行美洲动物世界。
 17            ContinentFactory america = new AmericaFactory();
 18            world = new AnimalWorld(america);
 19            world.RunFoodChain();
 20            Console.WriteLine("请按任意键退出 !");
 21           Console.Read();
 22        }

 23    }

 24
 25    abstract class ContinentFactory   //抽象工厂(大陆)
 26    {
 27        abstract public Herbivore CreateHerbivore();//创建草食动物
 28        abstract public Carnivore CreateCarnivore();//创建肉食动物
 29    }

 30
 31    class AfricaFactory : ContinentFactory //具体工厂(非洲)
 32    {
 33        override public Herbivore CreateHerbivore()
 34        return new Wildebeest(); }
 35
 36        override public Carnivore CreateCarnivore()
 37        return new Lion(); }
 38    }

 39
 40    class AmericaFactory : ContinentFactory  //具体工厂(美洲)
 41    {
 42        override public Herbivore CreateHerbivore()
 43        return new Bison(); }
 44
 45        override public Carnivore CreateCarnivore()
 46        return new Wolf(); }
 47    }

 48
 49    abstract class Herbivore  //抽象产品(草食动物)
 50    {
 51    }

 52
 53    abstract class Carnivore  //抽象产品(食肉动物)
 54    {
 55        abstract public void Eat(Herbivore h);
 56    }

 57
 58    class Wildebeest : Herbivore  //产品(羚羊)
 59    {
 60    }

 61
 62    class Lion : Carnivore  //产品(狮子)
 63    {
 64        override public void Eat(Herbivore h)
 65        {
 66            // 吃肉食
 67            Console.WriteLine("狮子吃 " + h);
 68        }

 69    }

 70
 71    class Bison : Herbivore  //产品(野牛)
 72    {
 73    }

 74
 75    class Wolf : Carnivore //产品(狼)
 76    {
 77        // Methods
 78        override public void Eat(Herbivore h)
 79        {
 80            // 吃肉食
 81            Console.WriteLine( " 狼吃  " + h);
 82        }

 83    }

 84
 85    class AnimalWorld  //程序客户端
 86    {
 87        private Herbivore herbivore;
 88        private Carnivore carnivore;
 89
 90        public AnimalWorld(ContinentFactory factory)
 91        {
 92            carnivore = factory.CreateCarnivore();
 93            herbivore = factory.CreateHerbivore();
 94        }

 95
 96        public void RunFoodChain()
 97        
 98            carnivore.Eat(herbivore);
 99        }

100    }

101
102}


 /*该源码由邹江平2008-8-14编写,如有学习者请与QQ:200580231联系*/
* 补充说明
   抽象工厂模式以一种倾斜的方式支持增加新的产品,为新产品族的增加提供方便
    而不能为新的产品等级结构的增加提供这样的方便.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值