《javascript設計模式》學習筆記五:Javascript面向物件程式設計工廠模式例項分析
阿新 • • 發佈:2020-04-09
本文例項講述了Javascript面向物件程式設計工廠模式。分享給大家供大家參考,具體如下:
工廠模式和單例模式(https://www.jb51.net/article/184230.htm)應該是設計模式中應用最多的模式了,工廠模式的定義:提供建立物件的介面(來自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根據領導(呼叫者)的指示(引數),生產相應的產品(物件)。
1.簡單工廠模式
簡單工廠也就是按照上面的定義,根據不同的引數返回不同的結果。
//定義通用的物件類 var car = function(){}; //定義物件,物件內容省略,物件必須實現car定義的成員函式(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(); } //可以不用理會下面這行程式碼,這裡是為了確保所有的品牌汽車都實現了car類的方法 Interface.ensureImplements(car,Car); //返回物件 return car; } }; //如果我們要獲取一部汽車,只需要呼叫: var mycar = CarFactory.createCar('bmw'); //不論是什麼牌子的汽車,他應該都具有car的所有方法,因此即使不是同樣的物件,我們可以“透明”的呼叫他的方法
2.工廠模式
工廠模式與簡單工廠模式的區別在於工廠模式使用子類來建立物件,而不是一個獨立的類
//建立一個通用的工廠 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,請參考https://www.jb51.net/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的內容,下面的類名只是例項,並非真實存在)
如果熟悉PHP的同學,也應該瞭解像PHP的資料庫類一般也是工廠模式,形如:
$db = DataBase.getInstance('mysql'); //這裡的$db其實是new Mysql(),而無論是class Mysql,還是class Oracle,還是class MSsql都實現了下面的connect,query方法 $db->connect(); $db->query($sql);
感興趣的朋友可以使用線上HTML/CSS/JavaScript程式碼執行工具:http://tools.jb51.net/code/HtmlJsRun測試上述程式碼執行效果。
更多關於JavaScript相關內容感興趣的讀者可檢視本站專題:《javascript面向物件入門教程》、《JavaScript錯誤與除錯技巧總結》、《JavaScript資料結構與演算法技巧總結》、《JavaScript遍歷演算法與技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程式設計有所幫助。