设计模式—工厂模式

工厂模式:

实例化对象,用工厂方法代替new操作.

使用场景:

当我们需要大量new的时候可以考虑使用工厂模式

为了便于大家理解,大家可以将工厂模式想象成一个工厂制造产品就可以了。


MakeStationery.java 制造文具-接口

抽象工厂角色,给所有相同的制作流程制作规范

[java]  view plain copy print ?
  1. package com.luzhiming.Factory;   
  2. /**  
  3.  * @author strungle  E-mail: [email protected] 
  4.  * @version 创建时间:2013-6-24 下午9:15:03  
  5.  *  
  6.  * 制造文具-接口 
  7.  */  
  8. public interface MakeStationery {  
  9.   
  10.     public void makePen(Colour colour);  
  11. }  

Colour.java 枚举

[java]  view plain copy print ?
  1. package com.luzhiming.Factory;   
  2. /**  
  3.  * @author strungle  E-mail: [email protected] 
  4.  * @version 创建时间:2013-6-24 下午9:22:41  
  5.  *  
  6.  * 颜色枚举 
  7.  */  
  8. public enum Colour {  
  9.   
  10.     RED,BLUE,GREEN;  
  11. }  

MakePencialBoxFactory.java 制作铅笔盒的工厂

[java]  view plain copy print ?
  1. package com.luzhiming.Factory;   
  2. /**  
  3.  * @author strungle  E-mail: [email protected] 
  4.  * @version 创建时间:2013-6-24 下午9:29:32  
  5.  *  
  6.  * 制作铅笔盒的工厂 
  7.  *  
  8.  */  
  9. public class MakePencialBoxFactory implements MakeStationery {  
  10.   
  11.     @Override  
  12.     public void makePen(Colour colour) {  
  13.           
  14.         switch(colour)  
  15.         {  
  16.         case RED:  
  17.             System.out.println("制作红色的铅笔盒");  
  18.             break;  
  19.         case BLUE:  
  20.             System.out.println("制作绿色的铅笔盒");  
  21.             break;  
  22.         case GREEN:  
  23.             System.out.println("制作蓝色的铅笔盒");  
  24.             break;  
  25.             default:  
  26.                 System.out.println("制作黑色的铅笔盒");  
  27.         }  
  28.           
  29.         }  
  30. }  

MakePencialFactory.java 制作铅笔的工厂

[java]  view plain copy print ?
  1. package com.luzhiming.Factory;   
  2. /**  
  3.  * @author strungle  E-mail: [email protected] 
  4.  * @version 创建时间:2013-6-24 下午9:15:48  
  5.  *  
  6.  *  
  7.  * 制作铅笔的工厂 
  8.  *  
  9.  */  
  10. public class MakePencialFactory implements MakeStationery {  
  11.   
  12.     @Override  
  13.     public void makePen(Colour colour) {  
  14.   
  15.         switch(colour)  
  16.         {  
  17.         case RED:  
  18.             System.out.println("制作红色铅笔");  
  19.             break;  
  20.         case BLUE:  
  21.             System.out.println("制作绿色铅笔");  
  22.             break;  
  23.         case GREEN:  
  24.             System.out.println("制作蓝色铅笔");  
  25.             break;  
  26.             default:  
  27.                 System.out.println("制作黑色铅笔");  
  28.         }  
  29.     }  
  30.   
  31. }  

这样我们就实现了工厂模式,当然,此处是抽象工厂模式。

对于初学者可能会问,我们为什么要定义这么多工厂,我么直接定义一个工厂,然后然后根据不同的分支来创建对象不就可以了么,为什么还要定义一个工厂接口,然后在用不同的工厂类实现该接口呢?

其实道理很简单:

(1)首先,这样分离开来,不容易是正确的代码被修改错误

(2)其次,当我们再想制造其他对象的时候,我们可以自己定义一个工厂来实现我们的接口,避免了扩展功能而要去修改正确代码的问题

(3)制作的对象很多时候都是不一样的,不同的对象使用不同的工厂,而不同的工厂需要遵循相同的一个接口的标准

所以我们倡导使用抽象工厂方法模式

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