《javascript設計模式》學習筆記五:Javascript面向對象程序設計工廠模式實例分析
本文實例講述了Javascript面向對象程序設計工廠模式。分享給大家供大家參考,具體如下:
工廠模式和單例模式(http://chabaoo.cn/article/184230.htm)應該是設計模式中應用最多的模式了,工廠模式的定義:提供創(chuàng)建對象的接口(來自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根據(jù)領導(調用者)的指示(參數(shù)),生產(chǎn)相應的產(chǎn)品(對象)。
1.簡單工廠模式
簡單工廠也就是按照上面的定義,根據(jù)不同的參數(shù)返回不同的結果。
//定義通用的對象類 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; } }; //如果我們要獲取一部汽車,只需要調用: var mycar = CarFactory.createCar('bmw'); //不論是什么牌子的汽車,他應該都具有car的所有方法,因此即使不是同樣的對象,我們可以“透明”的調用他的方法
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://chabaoo.cn/article/184227.htm面向對象之二繼承) 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(); //調用父類方法 var mycar = fac.sellcar('benz'); //在上海買車 fac = new SHfactory(); hercar = fac.sellcar('audi'); //注意標紅的兩行調用,調用者都是fac,其實是factory的兩個不同子類,但是調用方法都一樣,這就是工廠方法的使用
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測試上述代碼運行效果。
更多關于JavaScript相關內(nèi)容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數(shù)學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。
- JavaScript設計模式之工廠模式和抽象工廠模式定義與用法分析
- JavaScript設計模式之抽象工廠模式介紹
- 淺析JS抽象工廠模式
- javascript抽象工廠模式詳細說明
- javascript設計模式 – 工廠模式原理與應用實例分析
- javascript設計模式 – 簡單工廠模式原理與應用實例分析
- javascript設計模式 – 單例模式原理與應用實例分析
- javascript 設計模式之享元模式原理與應用詳解
- javascript 設計模式之組合模式原理與應用詳解
- 《javascript設計模式》學習筆記七:Javascript面向對象程序設計組合模式詳解
- 《javascript設計模式》學習筆記四:Javascript面向對象程序設計鏈式調用實例分析
- javascript設計模式 – 抽象工廠模式原理與應用實例分析
相關文章
JavaScript如何讀取本地excel文件、txt文件的內(nèi)容
JavaScript是一種腳本語言,廣泛應用于前端開發(fā),這篇文章主要給大家介紹了關于JavaScript如何讀取本地excel文件、txt文件的內(nèi)容,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-06-06javascript 禁用IE工具欄,導航欄等等實現(xiàn)代碼
在處理問題時候遇到的,就順便記錄與大家一起分享下,感興趣的朋友可以參考下哈,希望可以幫助到你2013-04-04用函數(shù)式編程技術編寫優(yōu)美的 JavaScript_ibm
函數(shù)式編程語言在學術領域已經(jīng)存在相當長一段時間了,但是從歷史上看,它們沒有豐富的工具和庫可供使用。隨著 .NET 平臺上的 Haskell 的出現(xiàn),函數(shù)式編程變得更加流行。一些傳統(tǒng)的編程語言,例如 C++ 和 JavaScript,引入了由函數(shù)式編程提供的一些構造和特性。在許多情況下,JavaScript 的重復代碼導致了一些拙劣的編碼。如果使用函數(shù)式編程,就可以避免這些問題。此外,可以利用函數(shù)式編程風格編寫更加優(yōu)美的回調。2008-05-05