简单工厂模式VS工厂模式

 

 

   小插曲

        

         最近见XX同学也在学习设计模式,就问了她是如何学习的。

        

         XX同学说:我先看了一遍课本然后,从大致意思上找他们之间的联系,通过

 

对比来进行学习。比如:我最近在学习简单工厂、工厂模式和抽象工厂。

       

        听了之后,顿时觉得羞愧难当。一直在强调全局观,一直在强调对比学习,

 

而我呢?看了不到一半就稀里糊涂的开始敲了。哎,说好的全局观呢?说好的对比学习

 

呢?在此有必要在强调那句话:

        不谋全局者,不足谋一域,不谋万世者,不足谋一时。

     

        【仅以此献给正在奋斗的亲们!】

    

        有关的简单工厂模式的总结,请点下面的链接。

        http://blog.csdn.net/luckyzhoustar/article/details/20855463

 

 

      

        定义

         

        一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类

 

的实例化延迟到其子类。

      

      

 

        类图

    

 

       

 

        Product:定义工厂方法所创建的对象的接口。

        

        Creator:声明工厂方法,该方法返回一个Product类型的对象。

       

        ConcreteProduct:具体的产品,实现了Product接口。

       

        ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例。

        

      

       看上图我们发现,工厂模式只不过比简单工厂模式更具体化,这也是“简单”

 

二字的含义。以前只需要一个工厂,通过Switch语句进行判断就可以生产出相应的产

 

品,而在工厂模式里面,又把大的工厂具体的细分为一些小的工厂,在这些小的工厂里

 

面来生产产品。

      

      在现实生活中,我们知道,为何流水线作业效率比较高呢,主要在于分工作业的

 

精细化。而工厂模式也突出了这一点,通过一个大的工厂的抽象接口,然后衍生出许多

 

具体的小型工厂,那么这些在代码中又是如何来实现的呢?

   

               【先看与简单工厂的区别部分

 

 //简单雷锋工厂
    class SimpleFactory
    {
        public static LeiFeng CreateLeiFeng(string type)
        {
            LeiFeng result = null;
            switch (type)
            {
                case "学雷锋的大学生":
                    result = new Undergraduate();
                    break;
            }
            return result;
        }
    }


        //雷锋工厂
        interface IFactory
        {
            LeiFeng CreateLeiFeng();
        }


        class UndergraduateFactory:IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                return new Undergraduate();
            }
            
        }

        class volunteerFactory:IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                return new Volunteer();
            }
        }
    }


 

    而我们从上面的代码部分可以看出,在简单工厂模式中,是通过条件判断来生产产

 

品的,而在工厂模式中通过一个子类来实现一个接口来实现产品的生产。

 

   

   亲们,可能明白是怎么回事了,但是不太清楚到底都有什么优缺点呢?请接着看。

   

 static void Main(string[] args)
        {


            //简单工厂模式,在此需要一个一个的实例化大学生
            LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
            studentA.BuyRice();
            LeiFeng studentB = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
            studentB.Sweep();
            LeiFeng studentC = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
            studentC.Wash();


            //工厂方法模式,在此间接的通过具体的工厂实现即可
            IFactory factory = new UndergraduateFactory();
            LeiFeng student = factory.CreateLeiFeng();

            student.BuyRice();
            student.Sweep();
            student.Wash();

            Console.Read();
        }

   

   

    从上述简单工厂模式中可以看出,每个人打着“学雷锋的大学生”的旗号的话,都

 

需要一次次的调用工厂,而在工厂模式中只需要一次性实例化,就可以赋予“学雷锋大

 

学生”的名义。

   

 

    小结:

       

        简单工厂模式

           

        优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例

 

化相关的类。

        

        工厂模式

           

        把简单工厂中的内部逻辑判断移到了客户端代码来进行,克服了简单工厂违

 

背开放—封闭原则的特点,又保持了对象创建过程的优点。

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值