1、使用步骤
- 创建抽象/接口产品类,定义具体产品的公共接口方法;(产品接口类)
- 创建具体产品类,是继承抽象产品类的;(产品接口实现类)
- 创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品类的实例;(工厂类,创建具体产品实例)
- 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例。(使用类,使用工厂类获得想要的产品实例)
2、 优点
- 将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;(创建对象和使用对象分离)
- 把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则,面向接口编程,而不是面向实现编程。(面向接口编程)
3、缺点
- 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响。
- 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
- 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
4. 应用场景
在了解了优缺点后,我们知道了简单工厂模式的应用场景:
- 客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;
- 当工厂类负责创建的对象(具体产品)比较少时。