设计模式之: 工厂
大白话:当我们需要一辆车时候,就要说4s店,你要的大体参数有哪些,工厂就会根据你的要求,给你造一个全新的车给你,你只需要关注你的喜好,不用考虑造车过程和细节;
工厂模式详细
- 本质:封装创建对象细节,根据参数,返回特定类型对象;
- 解决什么:解决频繁藏繁琐创建对象和选择对象
- 何时使用:我们明确地计划不同条件下创建不同实例时
- 如何实现:封装公有参数对象过程,并根据判断,赋值特定属性;
- 生活案例:
- 需要一辆车,告诉销售你的配置
- 需要衣服裤子,告诉销售你的码数腰围胸围
- 需要租房,告诉中介价格位置要求
优点
- 方便,获取一个想要的对象,通过名字获取即可;
- 扩展性方便,新增对象,只需要加一个工厂即可
- 私密性,频闭创建对象过程细节,调用者只关心方法
缺点:
- 过多的工厂过大的添加工厂,会导出工厂类庞大臃肿,增加不必要的复杂度;
代码实现:
/** 手机工厂 */
function PhoneFactory(name) {
const phoneBase = Object.create(null);
phoneBase.screen = '全面屏'
phoneBase.wifi = 'WIFI 2.0'
phoneBase.pixel = '6400W'
if (this instanceof PhoneFactory) {
const phone = new this.__proto__[name](phoneBase)
return phone
} else {
return new PhoneFactory(name)
}
}
PhoneFactory.prototype = {
HW: function (base) {
return {...base, name: '华为'}
},
iphone: function (base) {
return {...base, name: '苹果'}
},
MI: function (base) {
return {...base, name: '小米'}
}
}
const HW = new PhoneFactory('HW')
const iphone = PhoneFactory('iphone')
const MI = PhoneFactory('MI')
小结
- 根据上面简单代码,知道了大概,就是生活工厂概率,核心逻辑:
把创建对象相关逻辑的操作统统都封装一起,逻辑抽离,在里面做对象加工过程
; - 补充:上面代码虽然很简单,但是就是最直观的工厂,如果后期要工厂,可以取消繁琐if操作;