设计流程
(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)客户端只知道传入工厂类的参数,对于如何创建对象并不关心。