工厂方法模式
简介
- 定义一个用于创建对象的接口,让子类决定实例化哪个类
使用场景
- 在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式
实现
- 实现工厂方法模式需要实现四个元素:抽象产品、具体产品、抽象工厂、具体工厂
// 抽象产品
public abstract class Product {
public abstract void method();
}
// 具体产品
public class ProductA extends Product {
@Override
public void method() {
System.out.println("产品A");
}
}
public class ProductB extends Product {
@Override
public void method() {
System.out.println("产品B");
}
}
// 抽象工厂(可省)
public abstract class Factory {
public abstract <T extends Product> T createProduct(Class<T> clz);
}
// 具体工厂
public class ConcreteFactory extends Factory {
@Override
public <T extends Product> T createProduct(Class<T> clz) {
Product p = null;
try {
p = (Product) Class.forName(clz.getName()).newInstance();
}catch (Exception e) {
e.printStackTrace();
}
return (T) p;
}
}
// 测试
public class Test {
public static void main (String[] args) {
ConcreteFactory factory = new ConcreteFactory();
ProductA productA = factory.createProduct(ProductA.class);
ProductB productB = factory.createProduct(ProductB.class);
productA.method();
productB.method();
}
}
Android中的工厂方法模式
- Activity中的各个生命周期方法就可以看作是工厂方法
总结
- 工厂方法模式通过依赖抽象来达到解耦的效果,并且将实例化的任务交给子类去完成,有非常好的扩展性
- 工厂方法模式用于生成比较复杂的对象。
- 工厂方法模式的应用非常广泛,然而缺点也很明显,就是每次为工厂方法添加新的产品时,都需要编写一个新的产品类