简单工厂模式

来源:互联网 发布:苹果电脑 免费办公软件 编辑:程序博客网 时间:2024/06/02 05:27

http://blog.csdn.net/lhc1105/article/details/20835277

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


简单工厂模式示例


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

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

  



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


[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. namespace myFactory  
  2. {  
  3.       
  4.               
  5.     public class Cpu8086:CPU   
  6.     {  
  7.         public Cpu8086()  
  8.         {     
  9.             this.size="8086";  
  10.             Console.WriteLine("生产的是8086CPU。");  
  11.         }  
  12.           
  13.   
  14.     }  
  15.   
  16.     public class Cpu8080:CPU   
  17.     {  
  18.         public Cpu8080()  
  19.         {  
  20.             this.size ="8080";  
  21.             Console.WriteLine("生产的是8080CPU。");  
  22.         }  
  23.           
  24.   
  25.     }  
  26.   
  27.     public class Cpu8085:CPU   
  28.         {  
  29.             public Cpu8085()  
  30.             {  
  31.                 this.size ="8085";  
  32.                 Console.WriteLine("生产的是8085CPU。");  
  33.             }  
  34.               
  35.   
  36.         }  
  37.   
  38.   
  39.     public class Client  
  40.     {  
  41.         public static CPU chooseCPU(string Size)  
  42.         {  
  43.             CPU myCPU=null;  
  44.             switch(Size)  
  45.             {  
  46.                 case "8086":  
  47.                     myCPU =new Cpu8086();  
  48.                     break;  
  49.                 case "8080":  
  50.                     myCPU =new Cpu8080();  
  51.                     break ;  
  52.                 case "8085":  
  53.                     myCPU =new Cpu8085();  
  54.                     break ;  
  55.   
  56.             }  
  57.             return myCPU;  
  58.   
  59.   
  60.         }  
  61.     }  
  62.   
  63.   
  64.   
  65. public class CPU  
  66.     {  
  67.         private string Size;  
  68.         
  69.         public string size  
  70.         {  
  71.             get { return Size; }  
  72.             set { Size = value; }  
  73.         }  
  74.     
  75.           
  76.      }  
  77.   
  78.   
  79.   
  80.   
  81.     class Program  
  82.     {  
  83.         static void Main(string[] args)  
  84.         {  
  85.             CPU myCPU;  
  86.             myCPU =Client.chooseCPU("8086");  
  87.   
  88.         }  
  89.     }  
  90.   
  91. }  

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




 简单工厂模式组成 

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


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

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

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


 优缺点分析

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


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


适用场景 

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

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

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



小结

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



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

0 0
原创粉丝点击