设计流程
(1) 将需要创建的各种不同对象的相关代码封装到不同的类中,这些类成为产品类,而将他们的公共代码抽象提取并封装到一个抽象产品类中,使具体产品类成为抽象产品类的子类。
(2)提供一个工厂类用于创建各种产品。
抽象产品类:
public abstract class Product {
// 所有产品的公用业务方法
public void methodSame() {
// 公共方法的实现
System.out.println("我是产品!");
}
public abstract void methodDiff();
}
具体产品类:
public class ConcreteProduct extends Product {
@Override
public void methodDiff() {
System.out.println("我是产品A");
}
}
工厂类:
public class Factory {
// 静态工厂方法
public static Product getProduct(String arg){
Product product = null;
if(arg.equalsIgnoreCase("A")){
product = new ConcreteProduct();
// 初始化设置product
}
return product;
}
}
客户类:
public class Client {
public static void main(String[] args) {
Product product = Factory.getProduct("A");
product.methodSame();
product.methodDiff();
}
}
控制台结果:
我是产品!
我是产品A
适用场景
(1) 工厂类负责创建的对象较少。
(2)客户端只知道传入工厂类的参数,对于如何创建对象并不关心。