工厂模式

概念

工厂模式不裸露创建对象的具体逻辑,而是将逻辑封装在一个函数中,创立大量类似对象,那么这个函数就能够被视为一个工厂。工厂模式依据形象水平的不同能够分为:简略工厂工厂办法形象工厂

长处

通过工厂模式,咱们能够疾速创立大量类似对象,没有反复代码。

毛病

工厂模式创立的对象属于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 // ['妲己', '小乔', '周瑜', '王昭君']