1.定义:工厂方法模式就是定义一个用于创建对象的接口,让子类决定实例化哪个类。
2.看代码:
产品抽象类
public abstract class Product { /** * 产品类抽象方法 */ public abstract void method(); }
具体产品A
public class ProductA extends Product{ private static final String TAG = "ProductA"; @Override public void method() { Log.i(TAG, "method: "+"产品A"); } }
具体产品B
public class ProductB extends Product { private static final String TAG = "ProductB"; @Override public void method() { Log.i(TAG, "method: "+"产品B"); } }
抽象工厂类
/** * 抽象工厂 */ public abstract class Factory { public abstract Product createProduct(); }
具体工厂类
public class ConcreteFactory extends Factory { @Override public Product createProduct() { return new ProductA(); } }
实现
Factory factory=new ConcreteFactory(); Product a=factory.createProduct(); a.method();
其主要为:
<1>抽象工厂,为工厂模式的核心
<2>具体工厂,实现具体的逻辑功能
<3>抽象产品,是工厂模式创建的产品的父类
<4>具体产品,实现抽象产品的某个具体对象
以上的方法如果需要得到ProductB的实例,可以创建productB的实例工厂。也可以在工厂的方法中传入Class类决定是哪一个产品类。
抽象工厂类
/** * 抽象工厂 * 具体生产什么产品有子类实现 * @param tClass 产品对象类型 * */ public abstract class Factory { public abstract <T extends Product> T CreateProduct(Class<T> tClass); }
具体的工厂类,通过反射获取类的实例
public class ConcreteFactory extends Factory { @Override public <T extends Product> T CreateProduct(Class<T> tClass) { Product product=null; try { product= (Product) Class.forName(tClass.getName()).newInstance(); }catch (Exception e){ } return (T)product; } }
实现:
Factory factory=new ConcreteFactory(); Product product=factory.CreateProduct(ProductB.class); product.method();