課程
/前端開發
/jQuery
/jQuery源碼解析(架構與依賴模塊)
工廠模式是什么呀?
2017-06-26
源自:jQuery源碼解析(架構與依賴模塊) 1-5
正在回答
工廠模式主要是為了創建對象實例或者類簇(抽象工廠), 關心的是最終產出(創建)的對象, 而不關心創建的過程.
在出現多個類的時候, 每次創建需要找到對應的類往往比較麻煩, 這時候通常使用一個函數進行封裝來創建所需要的對象,這樣就無需關注創建這些對象到底依賴哪些基類了, 只要知道有這個函數就可以了, 通常這個函數被稱為工廠函數,這種模式叫簡單工廠模式
案例
假設一體育商品店賣器材, 里面有很多體育商品, 及其相關介紹. 當你來到體育用品店買一個籃球及相關介紹時,你只需要問售貨員, 她會幫你找到你所需要的東西.
實現
// 籃球基類
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名隊員
qq_我不是漫游_0
qq_青年你好_0 回復 qq_我不是漫游_0
舉報
由淺入深地剖析jQuery庫的設計與實現,揭開框架背后的秘密
1 回答jQuery的模塊依賴網圖片太模糊
1 回答jQuery無new的格式
1 回答為何不用instanceof的方式來實現構造器的無new形式而用init?
2 回答四種上下文調用方式 的例子分別是什么?
3 回答總結的內容感覺有點夸大匿名函數的作用
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-06-26
工廠模式主要是為了創建對象實例或者類簇(抽象工廠), 關心的是最終產出(創建)的對象, 而不關心創建的過程.
在出現多個類的時候, 每次創建需要找到對應的類往往比較麻煩, 這時候通常使用一個函數進行封裝來創建所需要的對象,
這樣就無需關注創建這些對象到底依賴哪些基類了, 只要知道有這個函數就可以了, 通常這個函數被稱為工廠函數,
這種模式叫簡單工廠模式
案例
假設一體育商品店賣器材, 里面有很多體育商品, 及其相關介紹. 當你來到體育用品店買一個籃球及相關介紹時,你只需要問售貨員, 她會幫你找到你所需要的東西.
實現
// 籃球基類
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名隊員