工厂模式
概念
工厂模式不裸露创建对象的具体逻辑,而是将逻辑封装在一个函数中,创立大量类似对象,那么这个函数就能够被视为一个工厂。工厂模式依据形象水平的不同能够分为:简略工厂
,工厂办法
和形象工厂
长处
通过工厂模式,咱们能够疾速创立大量类似对象,没有反复代码。
毛病
工厂模式创立的对象属于Object,无奈辨别对象类型,这也是工厂模式没有宽泛应用的起因。
代码实现
简略工厂模式(动态):
// 例:将王者英雄进行按需分类,在一个公共的工厂中产出const personList = [ { person: ['妲己', '小乔', '周瑜', '王昭君'] }, { person: ['李白', '阿珂', '兰陵王', '韩跳跳'] }, { person: ['曹阿瞒', '凯爹', '宫本'] } ]let wangzhe = function (personType) { function Fashi() { this.person = personList[0].person } function Cike() { this.person = personList[1].person } function Zhanshi() { this.person = personList[2].person } switch (personType) { case 'fashi': return new Fashi(); break; case 'cike': return new Cike(); break; case 'zhanshi': return new Zhanshi(); break; default: throw new Error('参数谬误, 可选参数:fashi、cike、zhanshi'); } } //调用 let fashi = wangzhe('fashi'); let cike = wangzhe('cike'); let zhanshi = wangzhe('zhanshi'); fashi.peson // ['妲己', '小乔', '周瑜', '王昭君'] // es6写法: class Wangzhe { constructor(opt) { this.person = opt.person; } static getPersonList(personType) { switch (personType) { case 'fashi': return new Wangzhe(personList[0]); break; case 'cike': return new Wangzhe(personList[1]); break; case 'zhanshi': return new Wangzhe(personList[2]); break; default: throw new Error('参数谬误, 可选参数:fashi、cike、zhanshi'); }}}//调用Wangzhe.getPersonList('fashi').person // ['妲己', '小乔', '周瑜', '王昭君']