一、适用场景
简单工厂模式
虽然能够解决创建同类对象的问题,但是却存在以下问题:
1)当需要添加新的类时,就需要修改工厂方法
,这违背了开闭原则
(OCP, 对扩展开放、对源码修改封闭)
2)不适用创建多类对象
于是,工厂方法模式
便是为了解决以上问题的另一种创建型模式
二、核心思想
工厂方法模式
中,具体对象的创建过程不在工厂方法
中进行,而是推迟到子类中进行,如此在添加新的类
时就无需修改工厂方法
,只需要将子类注册进工厂方法
的原型对象中即可。
示例:
function Factory(type, options) {
if (this instance of Factory) {
return this[type](options)
}
return new Factory(type, options)
}
// 具体的创建过程
Factory.prototype.productA = function (options) {
// 产品A的创建逻辑
}
Factory.prototype.productB = function (options) {
// 产品B的创建逻辑
}
Factory.prototype.productC = function (options) {
// 产品C的创建逻辑
}
// ...
所以当我们需要添加新的类时,就只需要挂载在Factory.prototype
上即可,无需去修改工厂方法
,如此更符合开闭原则
。
而在使用时,就只需要:
const pdA = new Factory('productA', options)
const pdB = new Factory('productB', options)
// ...