課程
/前端開發(fā)
/jQuery
/jQuery源碼解析(架構(gòu)與依賴模塊)
工廠模式是什么呀?
2017-06-26
源自:jQuery源碼解析(架構(gòu)與依賴模塊) 1-5
正在回答
工廠模式主要是為了創(chuàng)建對象實(shí)例或者類簇(抽象工廠), 關(guān)心的是最終產(chǎn)出(創(chuàng)建)的對象, 而不關(guān)心創(chuàng)建的過程.
在出現(xiàn)多個類的時候, 每次創(chuàng)建需要找到對應(yīng)的類往往比較麻煩, 這時候通常使用一個函數(shù)進(jìn)行封裝來創(chuàng)建所需要的對象,這樣就無需關(guān)注創(chuàng)建這些對象到底依賴哪些基類了, 只要知道有這個函數(shù)就可以了, 通常這個函數(shù)被稱為工廠函數(shù),這種模式叫簡單工廠模式
案例
假設(shè)一體育商品店賣器材, 里面有很多體育商品, 及其相關(guān)介紹. 當(dāng)你來到體育用品店買一個籃球及相關(guān)介紹時,你只需要問售貨員, 她會幫你找到你所需要的東西.
實(shí)現(xiàn)
// 籃球基類
var Basketball = function() { ? ?
this.intro = '籃球盛行于美國';}Basketball.prototype = function() { ? ?getMember: function() { ? ? ?
??console.log('每個隊(duì)伍需要5名隊(duì)員'); ? ?}, ? ?
getBallSize: function() { ? ? ? ?
console.log('籃球很大'); ? ?}}
// 足球基類
var Football = function() { ? ?
this.intro = '足球在世界范圍內(nèi)盛行';
}Football.prototype = function() { ? ?getMember: function() { ? ? ? ?
console.log('每個隊(duì)伍需要11名隊(duì)員'); ? ?}, ? ?getBallSize: function() { ? ??
? ?console.log('足球很大'); ? ?}}// 網(wǎng)球基類
var Tennis = function() { ??
?this.intro = '每年有很多網(wǎng)球系列賽';}Tennis.prototype = function() { ? ?getMember: function() { ? ? ? ?
console.log('每個隊(duì)伍需要1名隊(duì)員'); ? ?}, ? ?getBallSize: function() { ? ?
?? ?console.log('網(wǎng)球很小'); ? ?}}// 運(yùn)動工廠(這邊相當(dāng)于咨詢體育器材店的售貨員, 告訴她你想要買什么體育用品)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) ? ? ? ? ? ?// 每年有很多網(wǎng)球系列賽
console.log(ball.getMember()); ? ?// 每個隊(duì)伍需要1名隊(duì)員
qq_我不是漫游_0
qq_青年你好_0 回復(fù) qq_我不是漫游_0
舉報(bào)
由淺入深地剖析jQuery庫的設(shè)計(jì)與實(shí)現(xiàn),揭開框架背后的秘密
1 回答jQuery的模塊依賴網(wǎng)圖片太模糊
1 回答jQuery無new的格式
1 回答為何不用instanceof的方式來實(shí)現(xiàn)構(gòu)造器的無new形式而用init?
2 回答四種上下文調(diào)用方式 的例子分別是什么?
3 回答總結(jié)的內(nèi)容感覺有點(diǎn)夸大匿名函數(shù)的作用
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-06-26
工廠模式主要是為了創(chuàng)建對象實(shí)例或者類簇(抽象工廠), 關(guān)心的是最終產(chǎn)出(創(chuàng)建)的對象, 而不關(guān)心創(chuàng)建的過程.
在出現(xiàn)多個類的時候, 每次創(chuàng)建需要找到對應(yīng)的類往往比較麻煩, 這時候通常使用一個函數(shù)進(jìn)行封裝來創(chuàng)建所需要的對象,
這樣就無需關(guān)注創(chuàng)建這些對象到底依賴哪些基類了, 只要知道有這個函數(shù)就可以了, 通常這個函數(shù)被稱為工廠函數(shù),
這種模式叫簡單工廠模式
案例
假設(shè)一體育商品店賣器材, 里面有很多體育商品, 及其相關(guān)介紹. 當(dāng)你來到體育用品店買一個籃球及相關(guān)介紹時,你只需要問售貨員, 她會幫你找到你所需要的東西.
實(shí)現(xiàn)
// 籃球基類
var Basketball = function() { ? ?
this.intro = '籃球盛行于美國';
}
Basketball.prototype = function() {
? ?getMember: function() { ? ? ?
??console.log('每個隊(duì)伍需要5名隊(duì)員');
? ?}, ? ?
getBallSize: function() { ? ? ? ?
console.log('籃球很大');
? ?}
}
// 足球基類
var Football = function() { ? ?
this.intro = '足球在世界范圍內(nèi)盛行';
}
Football.prototype = function() {
? ?getMember: function() { ? ? ? ?
console.log('每個隊(duì)伍需要11名隊(duì)員');
? ?}, ? ?getBallSize: function() { ? ??
? ?console.log('足球很大');
? ?}
}// 網(wǎng)球基類
var Tennis = function() { ??
?this.intro = '每年有很多網(wǎng)球系列賽';
}
Tennis.prototype = function() {
? ?getMember: function() { ? ? ? ?
console.log('每個隊(duì)伍需要1名隊(duì)員');
? ?}, ? ?getBallSize: function() { ? ?
?? ?console.log('網(wǎng)球很小');
? ?}
}// 運(yùn)動工廠(這邊相當(dāng)于咨詢體育器材店的售貨員, 告訴她你想要買什么體育用品)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) ? ? ? ? ? ?// 每年有很多網(wǎng)球系列賽
console.log(ball.getMember()); ? ?// 每個隊(duì)伍需要1名隊(duì)員