简单工厂模式

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

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

 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了。这样不就把工作细分,达到了解耦的目的了吗?

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

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

原文地址:https://www.cnblogs.com/ljhboke/p/5042965.html