简单工厂

  简单工厂其实不是GOF中的设计模式,但是使用非常的广泛。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

   简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

简单工厂

酸奶产品:YogHurt.java

  1. /** 
  2.  * 酸奶的类, 主要是本人比较熟悉酸奶,呵呵 
  3.  * @author keju.wangkj 
  4.  *  
  5.  */ 
  6. public class YogHurt { 
  7.     private YogType yogType; 
  8.     private Date produceDay; 
  9.     private int validDays; 
  10.     private String producer; 
  11.  
  12.     public YogType getYogType() { 
  13.         return yogType; 
  14.     } 
  15.  
  16.     public void setYogType(YogType yogType) { 
  17.         this.yogType = yogType; 
  18.     } 
  19.  
  20.     public Date getProduceDay() { 
  21.         return produceDay; 
  22.     } 
  23.  
  24.     public void setProduceDay(Date produceDay) { 
  25.         this.produceDay = produceDay; 
  26.     } 
  27.  
  28.     public int getValidDays() { 
  29.         return validDays; 
  30.     } 
  31.  
  32.     public void setValidDays(int validDays) { 
  33.         this.validDays = validDays; 
  34.     } 
  35.  
  36.     public String getProducer() { 
  37.         return producer; 
  38.     } 
  39.  
  40.     public void setProducer(String producer) { 
  41.         this.producer = producer; 
  42.     } 
  43.  
  44.     @Override 
  45.     public int hashCode() { 
  46.         final int prime = 31
  47.         int result = 1
  48.         result = prime * result 
  49.                 + ((produceDay == null) ? 0 : produceDay.hashCode()); 
  50.         result = prime * result 
  51.                 + ((producer == null) ? 0 : producer.hashCode()); 
  52.         result = prime * result + validDays; 
  53.         result = prime * result + ((yogType == null) ? 0 : yogType.hashCode()); 
  54.         return result; 
  55.     } 
  56.  
  57.     @Override 
  58.     public boolean equals(Object obj) { 
  59.         if (this == obj) 
  60.             return true
  61.         if (obj == null
  62.             return false
  63.         if (getClass() != obj.getClass()) 
  64.             return false
  65.         YogHurt other = (YogHurt) obj; 
  66.         if (produceDay == null) { 
  67.             if (other.produceDay != null
  68.                 return false
  69.         } else if (!produceDay.equals(other.produceDay)) 
  70.             return false
  71.         if (producer == null) { 
  72.             if (other.producer != null
  73.                 return false
  74.         } else if (!producer.equals(other.producer)) 
  75.             return false
  76.         if (validDays != other.validDays) 
  77.             return false
  78.         if (yogType == null) { 
  79.             if (other.yogType != null
  80.                 return false
  81.         } else if (!yogType.equals(other.yogType)) 
  82.             return false
  83.         return true
  84.     } 
  85.  
  86.     @Override 
  87.     public String toString() { 
  88.         return "Yoghurt [produceDay=" + produceDay + ", producer=" + producer 
  89.                 + ", validDays=" + validDays + ", yogType=" + yogType + "]" 
  90.     } 
  91.  

 

  1. /** 
  2.  * 原味、草莓、红枣的 
  3.  * @author keju.wangkj 
  4.  * 
  5.  */ 
  6. public enum YogType { 
  7.     RAW,  
  8.     BERRY, 
  9.     CHINESEDATE 

YogHurtFactory.java

  1. public class YogHurtFactory { 
  2.     private static YogHurt yogHurt; 
  3.     public static YogHurt getYougHurt(YogType yogType){ 
  4.         yogHurt = new YogHurt(); 
  5.         switch (yogType) { 
  6.         case RAW: 
  7.             yogHurt.setYogType(YogType.RAW);    
  8.             break
  9.         case BERRY: 
  10.             yogHurt.setYogType(YogType.BERRY);    
  11.             break
  12.         case CHINESEDATE: 
  13.             yogHurt.setYogType(YogType.CHINESEDATE);    
  14.             break
  15.         default
  16.             yogHurt.setYogType(YogType.RAW);    
  17.             break
  18.         } 
  19.         yogHurt.setProduceDay(new Date()); 
  20.         yogHurt.setProducer("光明牛奶"); 
  21.         yogHurt.setValidDays(10); 
  22.         packages(); 
  23.         return yogHurt; 
  24.     } 
  25.     private static void packages() { 
  26.         System.out.println("装箱、打包"); 
  27.     } 

 测试类:

  1. public class YogHurtFactoryTest { 
  2.  
  3.     @Test 
  4.     public void testGetYougHurt() { 
  5.         System.out.println(YogHurtFactory.getYougHurt(YogType.CHINESEDATE).toString()); 
  6.     } 
  7.  

 装箱、打包

Yoghurt [produceDay=Thu Jan 06 00:39:43 CST 2011, producer=光明牛奶, validDays=10, yogType=CHINESEDATE]