工厂模式是创建型模式,利用工厂来生产类实例。
主要解决:接口选择的问题。
何时使用:明确计划不同条件下创建不同实例。
适用场景:作为一种创建型模式,在任何需要生成复杂对象的地方,都可以使用工厂模式。复杂对象适合使用工厂模式,简单对象,特别是只需要一个new就可以完成创建的对象,无需使用工厂模式。引入工厂类会增加系统的难度。
工厂方法返回基类指针,创建的对象一般是该基类的派生类,通过虚函数机制,实现多态。
工厂方法实现有多种:
1、静态工厂
该方式有个重要的特点,它拥有一个 create() 的静态方法,通过传入对应的产品名,它会创建具体的实例对象,然后统一返回基类指针。
缺点:扩展性差,新增一个产品都需要新增一个类,并且修改工厂类方法。
2、反射工厂
通过传入的参数名,直接去创建对应的对象,就不能将参数与创建对象一一关联对应起来。
当需要增加新的对象时,就不用修改工厂类方法了。
3、多方法工厂
创建静态方法,为每个产品创建一个静态方法,扩展时,需要为新对象创建一个静态创建方法。
4、普通工厂
为每个产品创建一个工厂,每个产品有一个对应的工厂类,这样可扩展性较好。优点就是拥抱变化。
所以这是一种理念上的差异,首先我们的代码应该是对扩展开放,对修改关闭。
方法1需要修改工厂类方法的代码才能实现扩展,这不是对修改关闭的。
方法2,扩展新产品时,