简单工厂模式
1.什么是简单工厂
由一个工厂类可以根据传入的参量决定创建出哪一种产品类的实例
2.简单工厂模式的结构
从上图可以看出,简单工厂模式涉及到工厂角色、抽象产品角色以及具体产品角色等
三个角色:
1 工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧
密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个
具体Java 类实现。
2 抽象产品(Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父
类,或它们共同拥有的接口。抽象产品角色可以用一个Java 接口或者Java 抽象类
实现。
3 具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角
色的实例,具体产品角色由一个具体Java 类实现。
3: 例子
Product
package design.simpleFactory; /*********************************************************************** * * Product.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Feb 26, 2010 9:28:42 AM * @revision $Id: * ***********************************************************************/ //产品接口 public interface Product { public void getName(); }
具体产品Grape
package design.simpleFactory; /*********************************************************************** * * ProductB.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Feb 26, 2010 9:30:31 AM * @revision $Id: * ***********************************************************************/ //具体产品Grape public class Grape implements Product { public void getName() { System.out.println("Grape"); } }
具体产品Apple
package design.simpleFactory; /*********************************************************************** * * ProductA.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Feb 26, 2010 9:29:33 AM * @revision $Id: * ***********************************************************************/ //具体产品Apple public class Apple implements Product { public void getName() { System.out.println("Apple"); } }
ProductCreator
package design.simpleFactory; /*********************************************************************** * * ProductCreator.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Feb 26, 2010 9:31:30 AM * @revision $Id: * ***********************************************************************/ public class ProductCreator { public Product createProduct(String type) { if("Apple".equals(type)){ return new Apple(); } if("Grape".equals(type)){ return new Grape(); } else { return null; } } }
test
package design.simpleFactory; /*********************************************************************** * * test.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Feb 26, 2010 9:33:33 AM * @revision $Id: * ***********************************************************************/ public class test { /** * @param args */ public static void main(String[] args) { ProductCreator creator = new ProductCreator(); creator.createProduct("Apple").getName(); creator.createProduct("Grape").getName(); } }
具体创建哪个类的时候通过传递参数来创建具体的类
4:适用范围
在编码时不能预见需要创建哪一种类的实例
一个类使用它的子类来创建对象
开发人员不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序
5:缺点
当需要新的产品时候,需要扩展ProductCreator类中createProduct中的方法。