3.抽象工厂模式

介绍

工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题。

核心要点

“ 一个工厂具有生产多样东西的能力。”

接口或抽象类定义工厂的行为(这里有多个行为),具体工厂继承接口或抽象类去实现

例子

美洲和非洲动物园

    using System;
    namespace 抽象工厂例子
    {
       abstract class ContinetFactory
        {
           public abstract Herbivore CreateHerbivore();
           public abstract Carnivore CreateCarnivore();
        }
       class AfricaFactory : ContinetFactory
       {

           public override Herbivore CreateHerbivore()
           {
               return new Wildebeest();
           }

           public override Carnivore CreateCarnivore()
           {
               return new Lion();
           }
       }

       class AmericaFactory : ContinetFactory
       {

           public override Herbivore CreateHerbivore()
           {
               return new Bison();
           }

           public override Carnivore CreateCarnivore()
           {
               return new Wolf();
           }
       }
        abstract class Herbivore
        {

        }
        abstract class Carnivore
        {
          public abstract void Eat(Herbivore h);
        }

        class Wildebeest : Herbivore
        { 

        }
        class Lion : Carnivore
        {

            public override void Eat(Herbivore h)
            {
                Console.WriteLine(this.GetType().Name + " eats " + h.GetType().Name);
            }
        }
        class Bison : Herbivore
        { 

        }
        class Wolf : Carnivore
        {

            public override void Eat(Herbivore h)
            {
                Console.WriteLine(this.GetType().Name + " eats " + h.GetType().Name);
            }
        }

        class AnimalWorld
        {
            private Herbivore herbivore;
            private Carnivore carnivore;
            public AnimalWorld(ContinetFactory factory)
            {
                herbivore = factory.CreateHerbivore();
                carnivore = factory.CreateCarnivore();
            }
            public void RunFoodChain()
            {
                carnivore.Eat(herbivore);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值