定义
定义一个用于创建对象的接口,让子类决定实例化那个类。
使用场景
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。
简单实现
/**
* 抽象产品类
*/
public abstract class Product {
/**
* 产品类的抽象方法,有具体的产品去实现
*/
public abstract void method();
}
/**
* 具体产品A
*/
public class ProductA extends Product {
@Override
public void method() {
System.out.print("Product A");
}
}
/**
* 具体产品B
*/
public class ProductB extends Product {
@Override
public void method() {
System.out.print("Product B");
}
}
/**
* 抽象工厂类
*/
public abstract class Factory {
public abstract ProductA createProductA();
public abstract ProductB createProductB();
public abstract <T extends Product> T createProduct(Class<T> cls) throws Exception;
}
/**
* 具体工厂类
*/
public class ProductFactory extends Factory {
@Override
public ProductA createProductA() {
return new ProductA();
}
@Override
public ProductB createProductB() {
return new ProductB();
}
@Override
public <T extends Product> T createProduct(Class<T> cls) throws Exception {
return (T) Class.forName(cls.getName()).newInstance();
}
}
public class Client {
public static void main(String[] args){
Factory factory = new ProductFactory();
factory.createProductA().method();
factory.createProductB().method();
try {
factory.createProduct(ProductA.class).method();
} catch (Exception e) {
e.printStackTrace();
}
}
}