美文网首页
(2)JavaScript简单工厂模式二

(2)JavaScript简单工厂模式二

作者: jaimor | 来源:发表于2019-04-18 11:11 被阅读0次

    上一篇文章说到了简单工厂模式,这种模式常规情况下是比较实用的,没有多大问题。但是某些情况下就会出现代码不好维护的问题。

    比如说有一个工厂是组装汽车的,这个工厂又比较大,什么汽车都组装,那么就需要创建很多中汽车类,比如:

    function Nissan() {
      this.color = 'white';
      this.price = 12345;
    }
    function Volkswagen() {
      this.color = 'black';
      this.price = 11115;
    }
    function Tesla() {
      this.color = 'green';
      this.price = 12215;
    }
    //...
    //问题出现了:有多少中车就需要创建多少个类在全局window中,这样会严重污染全局环境。
    //而且当某人新建了一个同名变量或者类,那就更加悲剧,直接覆盖之前的代码……
    

    所以这里应该需要重新改变其工厂编写代码的模式,暂且命名为 组合工厂模式 吧。

    var CarFactory = function (type) {
      if (this.constructor === CarFactory) {    //这里的目的是,判断当前是否为 new 的对象,如果使用的是new,那么这里就为true
        return new this[type];  
      } else {      //否则就是直接当作函数调用,那么做一个兼容。当使用函数调用的时候,我们在内部new一个对象
        return new CarFactory(type);
      }
    }
    CarFactory.prototype = {
      Nissan: function () {
        //...
      },
      Volkswagen: function () {},
      Tesla: function () {}
      //...
    }
    

    这样在全局中只暴露一个CarFactory这样一个方法或者类,减少了污染全局环境的情况,以后的新增也很方便,使用和之前也一样。

    var nissan = new CarFactory('Nissan');  // var nissan = CarFactory('Nissan');
    

    相关文章

      网友评论

          本文标题:(2)JavaScript简单工厂模式二

          本文链接:https://www.haomeiwen.com/subject/fjtzwqtx.html