1、模式: 

简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。 

它是由一个工厂对象决定创建出哪一种产品类的实例。 

2、三个角色: 

  1、工厂类(Creator)角色:在客户端的直接调用下创建产品对象 

  2、抽象产品角色:可以用一个接口或者一个抽象类实现 

  3、具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例 

3、如果工厂方法总是循环使用同一个产品对象,那么这个工厂对象可以使用一个属性来存储这个产品对象。 

   每一次客户端调用工厂方法时,工厂方法总是提供这同一个对象。 

   如果工厂方法永远循环使用固定数目的一些产品对象,而且这些产品对象的数目并不大的话, 

   可以使用一些私有属性存储对这些产品对象的引用。比如:一个永远只提供一个产品对象的工厂对象 

   可以使用一个静态变量存储对这个产品对象的引用。 

   如果工厂方法使用数目不确定,或者数目较大的一些产品对象的话,使用属性变量存储对这些产品对象的引用就不方便了, 

   这时候 就应当使用聚集对象存储对产品对象的引用。 

Java实现代码:

 

package com.easyfactory.model;
/**
 * 定义外卖的一个接口
 * @author Administrator
 *
 */
public interface WaiMai {
    /**
     * 定一个吃和喝的方法
     */
    public void eat();
    public void drink();
}    

 

package com.easyfactory.model;


/**
 * 模型1
 * @author Administrator
 *
 */
public class Model1 implements WaiMai{
    public void eat(){
        System.out.println("吃果条");
        return;
    }
    public void drink(){
        System.out.println("果汁");
        return;
    }
}
package com.easyfactory.model;


/**
 * 模型2
 * @author Administrator
 *
 */
public class Model2 implements WaiMai {
    public void eat(){
        System.out.println("吃炒米粉");
        return;
    }
    public void drink(){
        System.out.println("啤酒");
        return;
    }
}
package com.easyfactory.model;


/**
 * 模型3
 * @author Administrator
 *
 */
public class Model3 implements WaiMai {
    public void eat(){
        System.out.println("吃牛肉面");
        return;
    }
    public void drink(){
        System.out.println("红茶");
        return;
    }
}
package com.easyfactory.model;


/**
 * 工厂类,根据需要建立目标对象的实例
 * @author Administrator
 *
 */
public class Factory {
    public static WaiMai newWaiMai(String s){
        if(s.equals("东门"))
            return new Model1();
        else if(s.equals("南门"))
            return new Model2();
        else 
            return new Model3();
    }
}
package com.easyfactory.model;

/**
 * 自定义一个异常类
 * @author Administrator
 *
 */
public class WaiMaiException extends Exception {
    public WaiMaiException(String s){
        super(s);
    }

}

测试用例

测试用例:

package com.easyfactory.model;

/**
 *测试 
 * @author Administrator
 *
 */
public class Test {
    public static void main(String[] s) throws WaiMaiException{
        WaiMai obj=null;
        System.out.println("今晚的夜宵怎么办");
        obj=Factory.newWaiMai("北门");
        obj.eat();
        obj.drink();
    }
}

 

结果显示:

今晚的夜宵怎么办
吃牛肉面
红茶

 

 

 

posted on 2012-04-24 03:27  十二月的黄昏  阅读(336)  评论(0编辑  收藏  举报