亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

正在回答

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號