设计模式3-抽象工厂模式

自闭症网瘾萝莉.ら 提交于 2020-01-26 04:49:54

  随着科技的不断发展,各种各样的新兴事物都出现在了我们的生活中。当然了,各种机械仿真动物也随之出现了,开始我们只有Animal,现在我们有仿真Animal了,那么仿真动物该怎么叫呢(仿真喵:喵喵喵,仿真狗:汪汪汪。真喵:喵~~~~~~,真dog:汪~汪~汪~)。现在我们抽象仿真动物,并创建仿真动物类:

/// <summary>
        /// 仿真动物
        /// </summary>
        public class SimulationAnimal
        {
            public virtual void SimulationCall()
            {
                Console.WriteLine("仿真动物叫");
            }
        }
        /// <summary>
        /// 仿真Dog
        /// </summary>
        public class SimulationDog : SimulationAnimal
        {
            public override void SimulationCall()
            {
                Console.WriteLine("汪汪汪");
            }
        }
        /// <summary>
        /// 仿真Cat
        /// </summary>
        public class SimulationCat : SimulationAnimal
        {
            public override void SimulationCall()
            {
                Console.WriteLine("喵喵喵");
            }
        }

  好了,仿真动物类我们已经创建好了,那么该怎么去生成仿真动物的实例呢?在工厂方法模式中,我们抽象了动物工厂(接口也行),实现具体工厂以生成具体动物的实例。现在是创建一个抽象仿真动物工厂,在实现具体的仿真动物工厂呢还没其他处理呢。如果这么做,当出现第二代仿真动物,第三代仿真动物后,我们继续创建抽象工厂吗,这样好像和不使用简单工厂前有点类似了。并且在执行主程序中需要创建不同的工厂,所以不能这样做。

  抽象工厂模式就来了:在工厂方法模式中我们创建了Dog工厂,只有一个方法返回了Dog实例,仿真Dog也是Dog没错吧,所以我们依旧让Dog工厂来产生我们的仿真Dog实例(大话设计模式中的例子:数据库:SQL,Oracle,数据模型:User,Department, 具体工厂:User工厂,Department工厂)。代码示例:

 /// <summary>
        /// 抽象工厂
        /// </summary>
        public abstract class AbstractFactory
        {
            //抽象方法
            public abstract Animal GetAnimal();

            public abstract SimulationAnimal GetSimulationAnimal();


        }
        /// <summary>
        /// 狗工厂
        /// </summary>
        public class DogFactory : AbstractFactory
        {
            public override Animal GetAnimal()
            {
                return new Dog();
            }
            public override SimulationAnimal GetSimulationAnimal()
            {
                return new SimulationDog();
            }
        }
        /// <summary>
        /// 猫工厂
        /// </summary>
        public class CatFactory : AbstractFactory
        {
            public override Animal GetAnimal()
            {
                return new Cat();
            }
            public override SimulationAnimal GetSimulationAnimal()
            {
                return new SimulationCat();
            }
        }

  在主程序中,我们就可以根据需要产生实例了。

  PS:当然,又是废话一大堆,莫得事,加油干。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!