目的
由于简单工厂模式在扩展时具有一定的缺点,所以工厂方法模式出现了,将对象的创建延迟到子类,可以随意扩展,更加符合开闭原则。
定义
工厂方法模式又叫工厂模式,它属于类创建模式;在工厂模式中,父类定义创建产品的公共接口,子类重写该方法编写创建相对应产品的逻辑,将产品创建的实际延迟到子类中,即通过子类类型来决定创建产品的类型。
结构
- 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的多态,充分的将产品创建与客户端进行了解耦,在任意时刻新增产品都无需对客户端代码进行修改