跟着书本学JavaScript设计模式(简单工厂模式)

186 阅读2分钟

简单工厂模式

简单工厂模式又称 静态工厂方法,由一个对象决定创建某一种产品对象类的实例。主要用来创建同类对象。如果我们存在太多类,而这些类都是属于某种对象类的类簇,可以提供一个简单工厂类。


通过多个类创建一个工厂

有时为了我们对类的管理,我们可以创建一个简单工厂,用来存储这一类簇中的实例,我们需要什么,就直接到工厂里面取什么。

    // 举例
    var Basketball = function(){
      this.intro = '篮球盛行于美国';
    }
    Basketball.prototype= {
      getMember:function(){
        console.log('每个队伍需要5名队员');
      },
      getBallSize: function(){
        console.log('篮球很大');
      }
    }

    var Football = function(){
      this.intro='足球在世界范围内很流行';
    }
    Football.prototype = {
       getMember:function(){
        console.log('每个队伍需要11名队员');
      },
      getBallSize: function(){
        console.log('足球很大');
      }
    }

    var Tennis = function() {
      this.intro = '每年有很多网球系列赛';
    }

    Tennis.prototype = {
      getMember:function(){
        console.log('每个队伍需要1名队员');
      },
      getBallSize: function(){
        console.log('网球很小');
      }
    }

    // 创建一个运动工厂类
    var SportsFactory = function(name) {
      switch (name) {
        case 'NBA':
          return new Basketball();
        case 'wordCup':
          return new Football();
        case 'FrenchOpen':
          return new Tennis();
      }
    }

    var football = SportsFactory('wordCup');
    console.log(football); // Football {intro: "足球在世界范围内很流行"}
    console.log(football.intro); // 足球在世界范围内很流行
    football.getMember(); // 每个队伍需要11名队员


通过工厂类创建特定的类

一个对象有时也可代替许多类,简单工厂模式的理念就是创建对象,像上面那种方式是对不同的类实例化,不过除此之外简单工厂模式还可以用来创建相似对象。可以借鉴继承时的寄生模式进行实现。

    // 工厂模式
    function createBook(name,time,type) {
      // 创建一个过渡对象
      var o = new Object();
      o.name = name;
      o.time = time;
      o.type = type;
      o.getName = function(){
        console.log(this.name);
      };
      return o;
    }

    var book1 = createBook("js book",2014,"js");
    var book2 = createBook("css book",2013,"css");

    book1.getName(); // js book
    book2.getName(); // css book

总结

第一种是通过类实例化对象创建的,第二种是通过创建一个新对象然后报装增强其属性和功能来实现。他们之间的差异性也造成前面通过类创建的对象,如果这些类继承同一 父类,那么他们的父类原型上的方法可以共用,而后面寄生方式创建的对象都是一个新 的个体,所以他们不能共用。