简单工厂模式

     简单工厂模式的核心,就是用一个单独的类,来完成创造实例的过程。


简单工厂模式示例


     例如,现在有一个CPU的工厂,它们目前生产3款CPU,型号分别为:8086,880,8085,具体生产那种型号的CPU,要看顾客怎么下单,如果顾客要求生产8086型号的CPU,那么,工厂接到单子后,就马上生产处一批8086的CPU,在这个过程中,顾客根本不用知道这款CPU是怎么生产的,它只要提供一个型号,然后就拿到指定型号的CPU。

   整个工程用简单工厂模式描述,就是:

  简单工厂模式_第1张图片



其中,CPU类,代表所有CPU的父类,它有各种参数,但是为了简化模型,这里只给出了一个参数。Client类承担简单工程中那个最核心的类,由这个类来判断,到底是实例化哪个对象。代码如下:


namespace myFactory
{
    
            
    public class Cpu8086:CPU 
    {
        public Cpu8086()
        {   
            this.size="8086";
            Console.WriteLine("生产的是8086CPU。");
        }
        

    }

    public class Cpu8080:CPU 
    {
        public Cpu8080()
        {
            this.size ="8080";
            Console.WriteLine("生产的是8080CPU。");
        }
        

    }

    public class Cpu8085:CPU 
        {
            public Cpu8085()
            {
                this.size ="8085";
                Console.WriteLine("生产的是8085CPU。");
            }
            

        }


    public class Client
    {
        public static CPU chooseCPU(string Size)
        {
            CPU myCPU=null;
            switch(Size)
            {
                case "8086":
                    myCPU =new Cpu8086();
                    break;
                case "8080":
                    myCPU =new Cpu8080();
                    break ;
                case "8085":
                    myCPU =new Cpu8085();
                    break ;

            }
            return myCPU;


        }
    }



public class CPU
    {
        private string Size;
      
        public string size
        {
            get { return Size; }
            set { Size = value; }
        }
  
        
     }




    class Program
    {
        static void Main(string[] args)
        {
            CPU myCPU;
            myCPU =Client.chooseCPU("8086");

        }
    }

}

如上,如果客户选择生产8086型号的CPU,那么,只需给出一个型号,然后拿到产品。




 简单工厂模式组成

 简单工厂模式中有3中角色:


1,工厂角色:简单工厂模式的核心,负责创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建需   的产品对象。例如,上面的Client就是工厂角色,由它来觉得创建哪个实例。

 2, 抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。例如,CPU这个抽象类就是抽象产品的角色,所有的具体产品都继承于它。

3, 具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。例如,各种具体型号的CPU,如Cpu8086,这些都是具体产品角色,在模型中,这些是最终要得到的东西。


 优缺点分析

        优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自 的职责和权利,有利于整个软件体系结构的优化。


   缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;


适用场景 

工厂类负责创建的对象比较少;

客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。



小结

   最近学习设计模式,感觉编码要面向对象,学习则要面向生活。



注:文中部分内容来自百度。


你可能感兴趣的:(工厂模式)