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(); } }
结果显示:
今晚的夜宵怎么办
吃牛肉面
红茶