Skip to content

Latest commit

 

History

History
87 lines (76 loc) · 2.1 KB

File metadata and controls

87 lines (76 loc) · 2.1 KB

一. 简单工厂模式

简单工厂模式的概念就是创建对象,不仅如此,简单工厂模式还可以用来创建相似的对象。

场景

如果你想创建一些书,那么这些书都有一些相似的地方,比如目录、页码等。也有很多不同的地方, 如书名、出版时间、书的类型等,对于创建的对象相似的属性当然好处理,对于不同的属性就要有针对的修改处理了。

//工厂模式
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', '2017/11/16', 'JS');
var book2 = createBook('css book', '2017/11/13', 'CSS');

book1.getName();
book2.getName();
var Basketball = function() {
  this.info = '美国篮球';
};
Basketball.prototype = {
  constructor: Basketball,
  getMember: function() {
    console.log('每队需要5个成员');
  },
  getBallSize: function() {
    console.log('这个篮球还是很大的');
  }
};
var Football = function() {
  this.info = '这是足球';
};
Football.prototype = {
  constructor: Football,
  getMember: function() {
    console.log('足球每队需要十一个人');
  },
  getBallSize: function() {
    console.log('足球我不喜欢');
  }
};
var Tennis = function() {
  this.info = '网球貌似现在还是蛮流行的';
};
Tennis.prototype = {
  constructor: Tennis,
  getMember: function() {
    console.log('一对一,二对二咯');
  },
  getBallSize: function() {
    console.log('网球还是比较小的');
  }
};

//球类工厂
var sportsFactory = function(name) {
  switch (name) {
    case 'NBA':
      return new Basketball();
      break;
    case 'wordCup':
      return new Football();
      break;
    default:
      return new Tennis();
  }
};

这种简单工厂模式非常的像寄生式继承,只不过这里 o 没有继承任何对象和类。

简单工厂的用途就是创建对象,或者创建相似的对象。