Java设计模式之工厂方法模式
一、定义
就是定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建实例对象的工作推迟到子类当中,核心工厂不再负责具体产品的创建。
二、实现
1、定义产品
package com.product; /** * 定义抽象产品类 * @author Administrator * */ public abstract class AbstractProduct { private String name; public AbstractProduct() { } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.product; /** * 具体产品A * @author Administrator * */ public class ProductA extends AbstractProduct{ public ProductA(){ this.setName("ProductA"); } }
package com.product; /** * 具体产品B * @author Administrator * */ public class ProductB extends AbstractProduct{ public ProductB(){ this.setName("ProductB"); } }
2、创建工厂
package com.factory; import com.product.AbstractProduct; /** * 定义工厂接口 * @author Administrator * */ public interface IProductFactory { public AbstractProduct createProduct(); }
package com.factory; import com.product.AbstractProduct; import com.product.ProductA; /** * 工厂实现类 * @author Administrator * */ public class ProductFactory implements IProductFactory{ @Override public AbstractProduct createProduct() { return new ProductA(); } }
3、测试
结果输出 ProductApackage com.main; import com.factory.IProductFactory; import com.factory.ProductFactory; /** * 测试类 * @author Administrator * */ public class MainApp { public static void main(String[] args){ IProductFactory pf = new ProductFactory(); System.out.print(pf.createProduct().getName()); } }
假如此时要生产产品B,那么我们可以再创建一个工厂的实体类,只要实现 IProductFactory,在createProduct中创建ProductB对象
三、设计原则
体现“开-闭”原则,对修改闭合,对宽展开放依赖倒置原则,工厂和产品都依赖于抽象,而不是具体的实现类
四、适用场合
a、当子类型可能会有很多,以后需要不断增添不同的子类实现时b、当一个系统尚在框架设计阶段,还不知道将来需要实例化哪些具体类时c、系统设计之初不需要具体对象的概念(或者说没有具体对象的概念)