这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情
系列文章|源码
定义-是什么
简单工厂模式有一个很大的弊端就是不符合开闭原则,那么在使用的时候限制就比较多。工厂方法模式在这方面做了优化,那什么是工厂方法模式呢。
工厂方法模式是指定义一个创建对象的接口,但是实现让这个接口的类来决定实例化那个类,工厂方法让类的实例化推迟到了子类中进行。在工厂方法模式中用户只需要关系所需要产品对应的工厂,无需关心创建的细节,而且加入新的产品符合开闭原则。
通俗点说就是将工厂抽象出来,一个产品类对应的是一个工厂,客户端在需要实例化的时候选择指定的工厂拿到对应类就可,和简单工厂的区别在于简单工厂只有一个工厂,所有的类的实例化都揉在一个方法里面(当然这里可能有些人会反驳我,应为上文中最后一种优化完全不用写if else使用反射来实例化,但是实际情况可能每种类的实例化都不一样这个时候就不能再使用反射)而工厂方法是多个工厂一个产品对应一个工厂。
思考-为什么
适用场景
- 创建对象需要大量重复代码
- 客户端(应用层)不依赖于产品类实例如何被创建,实现等细节
- 一个类通过其子类来指定创建哪个对象
使用多态和里氏替换原则。
优点
- 用户只需要关心所需产品对应的工厂,无须关心创建细节
- 加入新产品符合开闭原则,提高可扩展性
缺点
- 类的个数容易过多,增加复杂度
- 增加了系统的抽象性和理解难度