《javascript設(shè)計模式》學習筆記五:Javascript面向?qū)ο蟪绦蛟O(shè)計工廠模式實例分析
本文實例講述了Javascript面向?qū)ο蟪绦蛟O(shè)計工廠模式。分享給大家供大家參考,具體如下:
工廠模式和單例模式(http://www.dhdzp.com/article/184230.htm)應該是設(shè)計模式中應用最多的模式了,工廠模式的定義:提供創(chuàng)建對象的接口(來自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根據(jù)領(lǐng)導(調(diào)用者)的指示(參數(shù)),生產(chǎn)相應的產(chǎn)品(對象)。
1.簡單工廠模式
簡單工廠也就是按照上面的定義,根據(jù)不同的參數(shù)返回不同的結(jié)果。
//定義通用的對象類
var car = function(){};
//定義對象,對象內(nèi)容省略,對象必須實現(xiàn)car定義的成員函數(shù)(yy一下車^_^)
var benz = function(){};
var bmw = function(){};
var audi = function(){};
//工廠方法
var CarFactory = {
createCar: function(brand){
//private member of CarFactory
var car;
switch(brand){
case 'benz':
car = new benz();
break;
case 'bmw':
car = new bmw();
break;
case 'audi':
car = new audi();
break;
default:
car = new bmw();
}
//可以不用理會下面這行代碼,這里是為了確保所有的品牌汽車都實現(xiàn)了car類的方法
Interface.ensureImplements(car, Car);
//返回對象
return car;
}
};
//如果我們要獲取一部汽車,只需要調(diào)用:
var mycar = CarFactory.createCar('bmw');
//不論是什么牌子的汽車,他應該都具有car的所有方法,因此即使不是同樣的對象,我們可以“透明”的調(diào)用他的方法
2.工廠模式
工廠模式與簡單工廠模式的區(qū)別在于工廠模式使用子類來創(chuàng)建對象,而不是一個獨立的類
//創(chuàng)建一個通用的工廠
var factory = function(){};
factory.prototype = {
sellcar: function(brand){
var car = this.createCar(brand);
return car;
},
createCar: function(){
throw new Error('unsupported operation on an abstract class');
}
}
//北汽集團
var BJfactory = function(){};
//繼承自factory,請參考http://www.dhdzp.com/article/184227.htm面向?qū)ο笾^承)
extend(BJfactory,factory);
//重寫汽車方法
BJfactory.prototype.createCar = function(brand){
var car;
switch(brand){
case 'bmw':
car = new BJbmw();
break;
case 'benz':
car = new BJbenz();
break;
case 'audi':
car = new BJaudi();
break;
default:
car = new BJbmw();
}
Interface.ensureImplements(car, Car);
return car;
}
//上汽
var SHfactory = function();
extend(SHfactory, factory);
//形式同北汽
……
//這樣一來,您在北京買車
var fac = new BJfactory();
//調(diào)用父類方法
var mycar = fac.sellcar('benz');
//在上海買車
fac = new SHfactory();
hercar = fac.sellcar('audi');
//注意標紅的兩行調(diào)用,調(diào)用者都是fac,其實是factory的兩個不同子類,但是調(diào)用方法都一樣,這就是工廠方法的使用
3.類比PHP(希望有助于理解1,2的內(nèi)容,下面的類名只是實例,并非真實存在)
如果熟悉PHP的同學,也應該了解像PHP的數(shù)據(jù)庫類一般也是工廠模式,形如:
$db = DataBase.getInstance('mysql');
//這里的$db其實是new Mysql(),而無論是class Mysql,還是class Oracle,還是class MSsql都實現(xiàn)了下面的connect,query方法
$db->connect();
$db->query($sql);
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- JavaScript設(shè)計模式之工廠模式和抽象工廠模式定義與用法分析
- JavaScript設(shè)計模式之抽象工廠模式介紹
- 淺析JS抽象工廠模式
- javascript抽象工廠模式詳細說明
- javascript設(shè)計模式 – 工廠模式原理與應用實例分析
- javascript設(shè)計模式 – 簡單工廠模式原理與應用實例分析
- javascript設(shè)計模式 – 單例模式原理與應用實例分析
- javascript 設(shè)計模式之享元模式原理與應用詳解
- javascript 設(shè)計模式之組合模式原理與應用詳解
- 《javascript設(shè)計模式》學習筆記七:Javascript面向?qū)ο蟪绦蛟O(shè)計組合模式詳解
- 《javascript設(shè)計模式》學習筆記四:Javascript面向?qū)ο蟪绦蛟O(shè)計鏈式調(diào)用實例分析
- javascript設(shè)計模式 – 抽象工廠模式原理與應用實例分析
相關(guān)文章
JS 文字符串轉(zhuǎn)換unicode編碼函數(shù)
AJAX傳遞中文字符串時必須把中文字符串編碼成unicode,一般會用到JS的自帶函數(shù)escape().不過找到了更好的函數(shù)來確決中文字符轉(zhuǎn)換成unicode編碼的函數(shù)2009-05-05
js+html5實現(xiàn)canvas繪制鏤空字體文本的方法
這篇文章主要介紹了js+html5實現(xiàn)canvas繪制鏤空字體文本的方法,涉及html5文字效果的相關(guān)技巧,需要的朋友可以參考下2015-06-06
JS實現(xiàn)深度優(yōu)先搜索求解兩點間最短路徑
這篇文章主要為大家詳細介紹了JS實現(xiàn)深度優(yōu)先搜索求解兩點間最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實現(xiàn)
本文主要介紹了uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-11-11
JavaScript實現(xiàn)給數(shù)字添加千位分隔符
這篇文章主要為大家詳細介紹了JavaScript如何實現(xiàn)給數(shù)字添加千位分隔符,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-11-11
淺談Javascript中Object與Function對象
JavaScript的面向?qū)ο笫腔谠蔚?,所有對象都有一條屬于自己的原型鏈。Object與Function可能很多看Object instanceof Function , Function instanceof Object都為true而迷惑,所以首先看下對象的實例2015-09-09
js?fill函數(shù)填充數(shù)組或?qū)ο蟮慕鉀Q方法
這篇文章主要介紹了js?fill函數(shù)填充數(shù)組或?qū)ο蟮膯栴}及解決方法,本文給大家介紹的非常詳細對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
JS上傳圖片前的限制包括(jpg jpg gif及大小高寬)等
文件上傳之前的檢測,通常是通過文件名來判斷文件類型是否合法,但是要想檢測文件的大小很難辦到,除非在本地或者使用控件。使用JS可以輕松解決詞問題,js在上傳圖片前判斷大小 這個可以用javascript實現(xiàn),效果2012-12-12

