Skip to content

Latest commit

 

History

History
94 lines (80 loc) · 2.37 KB

简单工厂设计模式.md

File metadata and controls

94 lines (80 loc) · 2.37 KB

JavaScript设计模式之简单工厂设计模式

作为创建性设计模式中的第一个介绍的,这个模式必然比较简单,所以不做过多介绍

使用场景

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

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

代码

//工厂模式
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没有继承任何对象和类。

简单工厂的用途就是创建对象,或者创建相似的对象。比较简单,比较常规,这里不再赘述