简单工厂

转自:http://blog.csdn.net/zhonghuan1992

简介:

         从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

 

类图:

        

         从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象。

         假设我们要吃苹果了,我们可以在代码中new一个苹果出来;当我们需要吃香蕉了,我们在代码中new一个香蕉出来。这种做法你会不会觉得麻烦,new的事情都要自己做。所以可以把new的事情交给一个工厂来做(顾名思义,工厂是生产东西的地方)。而简单工厂通过传进来的参数,决定生产什么产品。

言语表达不清,请看下面的代码:

 

代码:

当我们一开始没有使用简单工厂模式,可能,我们会这样做,看下面的代码

[java]  view plain copy
  1. class apple{  
  2.          publicapple(){  
  3.                    System.out.println("生产了一个苹果");  
  4.          }  
  5. }  
  6.    
  7. class banana{  
  8.          publicbanana(){  
  9.                    System.out.println("生产了一个香蕉");  
  10.          }  
  11. }  
  12.    
  13. public class Main{  
  14.          publicstatic void main(String[] args){  
  15.                    applea=new apple();  
  16.                    bananab=new banana();  
  17.          }  
  18. }  


我们需要什么,则自己在代码中new出来,这样有时候是很方便的,但有时候,我们想想这样的情况,代码比较复杂,我们希望很多事情不是交给主程序来做,而是把new这样的事情交给一个工厂来做,这样,在后面更改的时候,我就不用一个一个在主程序代码中去审查,而是在工厂代码中统一更改。

看简单工厂模式的代码:

[java]  view plain copy
  1. class fruit{  
  2.           
  3. }  
  4. class apple extends fruit{  
  5.          publicapple(){  
  6.                    System.out.println("生产了一个苹果");  
  7.          }  
  8. }  
  9.    
  10. class banana extends fruit{  
  11.          publicbanana(){  
  12.                    System.out.println("生产了一个香蕉");  
  13.          }  
  14. }  
  15.    
  16. class Factory{  
  17.          //通过传进来的参数str,来决定生产什么产品  
  18.          publicfruit create(String str){  
  19.                    if(str.equals("apple"))  
  20.                             returnnew apple();  
  21.                    if(str.equals("banana"))  
  22.                             returnnew banana();  
  23.                    returnnull;  
  24.          }  
  25. }  
  26.    
  27. public class Main{  
  28.          publicstatic void main(String[] args){  
  29.                    Factoryfac=new Factory();  
  30.                    applea=(apple)fac.create("apple");//传进apple,生产apple  
  31.                    bananab=(banana)fac.create("banana");  
  32.          }  
  33. }  


希望上述代码能够表述清楚。

 

为什么要简单工厂模式?看下面简单工厂模式的优点:

         这个模式的核心是工厂,这个工厂类有自己的逻辑,就是他懂得根据传进来的参数决定创造什么样的产品,客户端(就是调用工厂类方法的)不用管创建对象的事情,仅仅是知道告诉工厂类,他要什么,然后得到什么。这样实现了创建对象责任的分割。

 

简单工厂模式的缺点:

         没有完美的东西嘛,而且简单工厂离完美还差得远呢!这个模式关键缺点就是,工厂类好像是一个上帝一样,创造了所有。从科学的角度上说,上帝是不存在的。所以,当所有的创造对象都放在一个工厂类的时候,可想而知,这个工厂类是多么的复杂。所以,当产品多的时候,慎重考虑是否使用该模式。

 

遵循的原则:

         讨论一下简单工厂遵循的原则,顺便回顾一下。

         比较明显的,简单工厂遵循了开闭原则。(对开闭原则忘了,请看这里http://blog.csdn.net/zhonghuan1992/article/details/37391441)设想一下,当我们需要新的产品的时候,比如客人想吃西瓜了(夏天嘛,吃西瓜解暑),该模式不用更改原来的代码,仅仅是写一个新的类继承自fruit,然后,共产类中增加代码。这样就是满足了对拓展开放,对修改关闭的开闭原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值