工厂方法模式

102 阅读1分钟

目的

由于简单工厂模式在扩展时具有一定的缺点,所以工厂方法模式出现了,将对象的创建延迟到子类,可以随意扩展,更加符合开闭原则。

定义

工厂方法模式又叫工厂模式,它属于类创建模式;在工厂模式中,父类定义创建产品的公共接口,子类重写该方法编写创建相对应产品的逻辑,将产品创建的实际延迟到子类中,即通过子类类型来决定创建产品的类型。

结构

  • product
  • concreteProduct
  • factory:定义创建产品的公共接口
  • concreteFactory:执行创建产品的具体逻辑

demo

product

public abstract class Product {
}
public class ProductA extends Product{
}
public class ProductB extends Product {
}

factory

public interface Factory {
    Product create();
}
public class AFactory implements Factory {
    @Override
    public Product create() {
        return new ProductA();
    }
}
public class BFactory implements Factory {
    @Override
    public Product create() {
        return new ProductB();
    }
}

client

public class Client {
    public static void main(String[] args) {
        Product a = new AFactory().create();
        Product b = new BFactory().create();
    }
}

优点

客户端只需知道关注工厂即可,将对象的创建延迟到ConcreteFactory,并且新增加concreteProduct时无需更改现有业务代码,只需要增加对应的ConcreteFactory即可

缺点

一个工厂只能创建一种产品,当需要创建的concrete类目过多时,系统中就会出现许多与之对应的concreteFactory

总结

工厂方法模式利用product和factory的多态,充分的将产品创建与客户端进行了解耦,在任意时刻新增产品都无需对客户端代码进行修改