关于javascript:吃透JS设计模式-工厂模式

1次阅读

共计 1190 个字符,预计需要花费 3 分钟才能阅读完成。

工厂模式

概念

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

长处

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

毛病

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

正文完
 0