定义:一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的优点
- 良好的封装性,代码结构清晰。对象的创建有条件约束,调用者只需要知道类名即可,不需要了解创建过程。
- 扩展性优秀。如果工厂类的返回类型是泛型或者接口时,那么返回一个新产生的对象时,工厂类不需要修改。也意味着工厂类屏蔽了返回对象的差异。比如:JDBC屏蔽了不同数据库产品的差异,对不同的数据库只调用不同的驱动。
工厂方法模式的扩展
- 缩小为简单工厂模式:最基础的工厂模式,工厂类中用一个静态方法来产生产品类。这种工厂类不再需要具体工厂类来继承,变得更加简单了,所以称为简单工厂模式或静态工厂模式。
- 升级为多个工厂类:每个产品对应一个具体的工厂类。结构清晰,职责明确,但增加一个产品就要增加一个工厂,代码量增加。
- 替代单例模式:
- 延迟初始化
参考
《设计模式之禅》