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

工厂模式

概念

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

长处

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

毛病

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理