zoukankan      html  css  js  c++  java
  • 简单工厂模式

    我国有句说是这样说的“自己动手,丰衣足食”;

    哪么下面我们就来看一个自给自足的示例:

     class Mainphone

    {

         public static Assemlb getAssemlb(string type)

        {

           Assemlb assemlb=null; 

             if(type=="手机1号")

              {

                     assemlb=new phone1();

               }

              else if(type.Equals("手机2号"))

               {

                   assemlb =new phone2();

                }

                return assemlb;

        }

         static void Main(sting []args)

         {

            //A:我要一台手机1号

            //B:自己组装去

            Assemlb assemlb=getAssemlb("手机1号");

            assemlb.prind();

            //A:我还要一台手机2号

           //B:好,自己组装

           Assemlb assemlb=getAssemlb("手机2号");

           assemlb.prind();

           Console.Read();

         }

    }

    public abstract  class Assemlb//组装类

    {

          public  abstract  void prind();

    }

    public class phone1:Assemlb

    {

        public override  void prind()

       {

           Console.WriteLine("手机1号组装完成");

       }

    }

    public class phone2:Assemlb

    {

         public override void prind()  

          {

              Console.WriteLine("手机2号组装完成");

          }

    }

    确实自给自足多好啊,自己想要什么就自己去制作;但如果我又要一台手机3号呢?自己去学怎么组装,再买材料回来组装。因为所有事情都是自己做的所以程序的耦合度会很高,哪一部手机怎么组装自己都要知道。耦合度高的话对于程序的扩展性会有很大的阻碍,所以我们要进行解耦。简单工厂模式就是解耦的一种形式。

    下面我们来看看简单的工厂模式:

     class Mainphone

    {

         static void Main(sting []args)

         {

            //A:我要一台手机1号

            //B:OK,等我去组装给你

            Assemlb assemlb=Assemlbprind.getAssemlb("手机1号");

            assemlb.prind();

            //A:我还要一台手机2号

           //B:好,等我组装给你

           Assemlb assemlb=Assemlbprind.getAssemlb("手机2号");

           assemlb.prind();

           Console.Read();

         }

    }

    public abstract   class Assemlb//组装类

    {

          public  abstract  void prind();

    }

    public class phone1:Assemlb

    {

        public override  void prind()

       {

           Console.WriteLine("手机1号组装完成");

       }

    }

    public class phone2:Assemlb

    {

         public override void prind()  

          {

              Console.WriteLine("手机2号组装完成");

          }

    }

    public class Assemlbprind//工厂类

    {

         Assemlb assemlb=null; 

         public static Assemlb getAssemlb(string type)

        {

             if(type=="手机1号")

              {

                     assemlb=new phone1();

               }

              else if(type=="手机2号")

               {

                   assemlb =new phone2();

                }

                return assemlb;

        }

    }

            简单工厂模式代码和自给自足的示例代码基本一样,只是把getAssemlb()方法放到了类里面,怎么就进行了解耦了呢?可能有很多人看到这两段代码都会有这样的疑问(我也不例外)。接下来的是我个人的见解有什么不对的请指正:

            解耦说白了也就是把工作细分下去,各自负责自己的工作。

           把自给自足示例中的getAssemlb()方法拿出来放到工厂类中,同时也把这个方法的工作放到了工厂类;在自给自足的示例中,我们需要每一样东西都要去学会,但在简单工厂模式中就不需要花费这样的时间成本,我想要什么型号的手机我只要去手机店就行了,我完成不用知道我要的手机是怎么组装成的;怎么组装这部手机我们让专业人员去学就OK了。这样不就把工作细分,达到了解耦的目的了吗?

         有人会问,如果我要在简单工厂模式中加多一种手机的组装方法,不又要修改代码吗?这样我的流程不就会很复杂吗?扩展起来很麻烦啊?

         没错这就是简单工厂模式的缺点,不过在工厂模式中会解决这一缺点(有兴趣的可以去了解下工厂模式,这里讲的是简单工厂模式就不去讲工厂模式了,可能以后会讲到)。

  • 相关阅读:
    quick cocos2d-x之CCRect
    quick cocos2d x场景切换的生命周期函数调用学习
    quick cocos2d x 手机(Android端)启动过程学习
    quick cocos 或者 Cocos2dx 项目下的Android.mk文件的学习
    Android 与 C++ 之间纠缠
    Android 相册图片选取+自定义裁剪方式(非系统裁剪)
    Docker项目demo
    mysql(五)--性能优化总结
    Docker--网络
    mysql(四)------Mysql中的锁
  • 原文地址:https://www.cnblogs.com/ljhboke/p/5042965.html
Copyright © 2011-2022 走看看