工厂模式

13年前
  工厂模式:看字面意思,工厂是负责批量生产产品,转化为程序那么就是  一个工厂类,调用某个方法,就能批量产生你想要的对象 。  工厂生产东西,肯定先要作一个基础模子,对应我们程序的interface,然后按照模子批量生产各种不同的物品,这就是程序中实现接口,但是产品线是不要动的哦
    好吧,看代码: 我们批量生产苹果
    //统一的模子
    public interface Apple {
      public String getName();
    }
 
//白色的苹果,具体的模子
public class BlankApple implements Apple {
 /**  
  * @Function: BlankApple.java
  * @Description: 该函数的功能描述
  *
  * @return
  * @return:返回结果描述
  * @throws:异常描述
  *
  * @version: v1.0.0
  * @author: 浪子
  * @date: 2011-8-30 下午02:55:44
  *
  * Modification History:
  * Date         Author          Version            Description
  *---------------------------------------------------------*
  * 2011-8-30     浪子           v1.0.0               修改原因
  */
 public String getName() {
  System.out.println("我是白色苹果");
  return "";
 }
}
 
   public class RedApple implements Apple {
 /**  
  * @Function: RedApple.java
  * @Description: 该函数的功能描述
  *
  * @return
  * @return:返回结果描述
  * @throws:异常描述
  *
  * @version: v1.0.0
  * @author: 浪子
  * @date: 2011-8-30 下午02:55:04
  *
  * Modification History:
  * Date         Author          Version            Description
  *---------------------------------------------------------*
  * 2011-8-30     浪子           v1.0.0               修改原因
  */
 public String getName() {
 
  System.out.println("我是红色苹果");
  return "";
 }
}
  

public class AppleFactory {

 
 private static HashMap hashMap=new HashMap();
 
 
 /**
  *
 * @Function: AppleFactory.java
 * @Description: 创建苹果物品的方法
 *
 * @return
 * @return:返回结果描述
 * @throws:异常描述
 *
 * @version: v1.0.0
 * @author: 浪子
 * @date: 2011-8-30 下午02:57:01
 *
 * Modification History:
 * Date         Author          Version            Description
 *---------------------------------------------------------*
 * 2011-8-30     浪子           v1.0.0               修改原因
  */
 public static Apple createApple(Class c)  throws Exception
 {
   System.out.println(c.getPackage().getName());
    Apple apple=(Apple)c.newInstance();   //通过工厂创建出苹果
   return apple;  
 }
 
 
 
 /**
  *
 * @Function: AppleFactory.java
 * @Description: 工厂模式的具体应用,初始化延值
 *
 * @param c
 * @return
 * @throws Exception
 * @return:返回结果描述
 * @throws:异常描述
 *
 * @version: v1.0.0
 * @author: 浪子
 * @date: 2011-8-30 下午03:25:32
 *
 * Modification History:
 * Date         Author          Version            Description
 *---------------------------------------------------------*
 * 2011-8-30     浪子           v1.0.0               修改原因
  */
 public static Apple createAppleInitLazy(Class c) throws Exception
 {

 

//这个工厂,也算是应用缓存,可以在启动的时候,把一些耗资源的先连接上,放在Map里,整个应用保存,算是一个具体应该,通过这个就能获取自己想要的对象实例
  if(hashMap.containsKey(c.getName()))
   return (Apple)hashMap.get(c.getName());  
  else
  {
   Apple apple=(Apple)c.newInstance();
   
   hashMap.put(c.getName(), apple); 
   return apple;
   
  } 
 } 
 /**  
  * @Function: AppleFactory.java
  * @Description: 该函数的功能描述
  *
  * @param args
  * @return:返回结果描述
  * @throws:异常描述
  *
  * @version: v1.0.0
  * @author: 浪子
  * @date: 2011-8-30 下午02:50:31
  *
  * Modification History:
  * Date         Author          Version            Description
  *---------------------------------------------------------*
  * 2011-8-30     浪子           v1.0.0               修改原因
  */
 public static void main(String[] args) throws Exception {
//下面是测试

  Apple redApple= AppleFactory.createApple(RedApple.class);
  redApple.getName();
  
  Apple blankApple=AppleFactory.createApple(BlankApple.class);
  blankApple.getName();
  
  //Apple apple=AppleFactory.createApple(Apple.class);
  //apple.getName();
  
 }

}

后面还可以加上抽象类工厂,
思想:定义接口工厂,抽象类工厂继续接口工厂,再实例化工厂类,这样就可以创建不同的实现工厂类特性,还需定义个枚举