1类图
2定义:
一个用于创建对象的接口,让子类决定实例化那个类
3使用场景
需要生成复杂的对象。 用new就可以创建的对象无需使用工厂模式。
4具体实现
public abstract class Product {
public abstract void method ();
}
public class ConcreteProductA extends Product {
@Override
public void method () {
System.out.println("A" );
}
}
public class ConcreteProductB extends Product {
@Override
public void method () {
System.out.println("B" );
}
}
public abstract class Factory {
public abstract Product createProduct ();
}
public class ConcreteFactory extends Factory {
@Override
public Product createProduct () {
return new ConcreteProductA();
}
}
public class Client {
public static void main (String[] args) {
Factory factory = new ConcreteFactory();
Product product = factory.createProduct();
product.method();
}
}
5利用反射的方式决定创建那个产品类的实例
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 Client {
public static void main (String[] args) {
Factory factory = new ConcreteFactory();
Product product = factory.createProduct(ConcreteProductB.class);
product.method();
}
}
6每个产品都具体化抽象工厂类
public class ConcreteFactoryA extends Factory {
@Override
public Product createProduct () {
return new ConcreteProductA();
}
}
public class ConcreteFactoryB extends Factory {
@Override
public Product createProduct () {
return new ConcreteProductB();
}
}
public class Client {
public static void main (String[] args) {
Factory factory = new ConcreteFactoryA();
Product productA = factory.createProduct();
productA.method();
}
}