为了账号安全,请及时绑定邮箱和手机立即绑定

正在回答

1 回答

工厂模式主要是为了创建对象实例或者类簇(抽象工厂), 关心的是最终产出(创建)的对象, 而不关心创建的过程.

在出现多个类的时候, 每次创建需要找到对应的类往往比较麻烦, 这时候通常使用一个函数进行封装来创建所需要的对象,
这样就无需关注创建这些对象到底依赖哪些基类了, 只要知道有这个函数就可以了, 通常这个函数被称为工厂函数,
这种模式叫简单工厂模式

案例

假设一体育商品店卖器材, 里面有很多体育商品, 及其相关介绍. 当你来到体育用品店买一个篮球及相关介绍时,你只需要问售货员, 她会帮你找到你所需要的东西.

实现

// 篮球基类

var Basketball = function() {    

this.intro = '篮球盛行于美国';
}
Basketball.prototype = function() {
   getMember: function() {      

  console.log('每个队伍需要5名队员');
   },    

getBallSize: function() {        

console.log('篮球很大');
   }
}

// 足球基类

var Football = function() {    

this.intro = '足球在世界范围内盛行';

}
Football.prototype = function() {
   getMember: function() {        

console.log('每个队伍需要11名队员');
   },    getBallSize: function() {     

   console.log('足球很大');
   }
}// 网球基类

var Tennis = function() {   

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

console.log('每个队伍需要1名队员');
   },    getBallSize: function() {    

    console.log('网球很小');
   }
}// 运动工厂(这边相当于咨询体育器材店的售货员, 告诉她你想要买什么体育用品)var SportFactory = function(name) {    

switch(name) {        

case 'basketball':           

 return new Basketball();      

  case 'football':         

   return new Football();       

 case 'tennis':            

return new Tennis();
   }
}

var ball = new SportFactory('tennis');

console.log(ball.intro)            // 每年有很多网球系列赛

console.log(ball.getMember());    // 每个队伍需要1名队员

0 回复 有任何疑惑可以回复我~
#1

qq_我不是漫游_0

你这样写不得行,应该是 var Basketball = function() { this.intro = '篮球盛行于美国'; } Basketball.prototype = { getMember: function() { console.log('每个队伍需要5名队员'); }, getBallSize: function() { console.log('篮球很大'); } }
2017-07-28 回复 有任何疑惑可以回复我~
#2

qq_青年你好_0 回复 qq_我不是漫游_0

是不是还应该修正Basketball.prototype的constructor的属性。添加constructor:Baseketball.
2018-07-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

工厂模式的特点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信