javascript設(shè)計(jì)模式之工廠模式示例講解
javaScript工廠方式原始的方式
因?yàn)閷?duì)象的屬性可以在對(duì)象創(chuàng)建后動(dòng)態(tài)定義,這在 JavaScript 最初引入時(shí)都會(huì)編寫類似下面的代碼
var oCar = new Object;
oCar.color = "blue";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
alert(this.color);
};
在上面的代碼中,創(chuàng)建對(duì)象 car。然后給它設(shè)置幾個(gè)屬性:它的顏色是藍(lán)色,有四個(gè)門,每加侖油可以跑 25 英里。最后一個(gè)屬性實(shí)際上是指向函數(shù)的指針,意味著該屬性是個(gè)方法。執(zhí)行這段代碼后,就可以使用對(duì)象 car。不過(guò)這里有一個(gè)問(wèn)題,就是可能需要?jiǎng)?chuàng)建多個(gè) car 的實(shí)例,這顯然不是很好的方式。
解決方案:工廠方法
要解決該問(wèn)題,開(kāi)發(fā)者創(chuàng)造了能創(chuàng)建并返回特定類型的對(duì)象的工廠函數(shù)。例如,函數(shù) createCar() 可用于封裝前面列出的創(chuàng)建 car 對(duì)象的操作:
function createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function() {
alert(this.color);
};
return oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //輸出 "red"
oCar2.showColor(); //輸出 "blue"
調(diào)用此工廠函數(shù),將創(chuàng)建新對(duì)象,并賦予它所有必要的屬性,給 createCar() 函數(shù)加上參數(shù),即可為要?jiǎng)?chuàng)建的 car 對(duì)象的 color、doors 和 mpg 屬性賦值。這使兩個(gè)對(duì)象具有相同的屬性,卻有不同的屬性值。該方法有個(gè)不好的地方在于每創(chuàng)建一個(gè)car對(duì)象(即調(diào)用一次createCar函數(shù))都會(huì)重復(fù)的為每個(gè)對(duì)象創(chuàng)建showColor 方法,而這時(shí)沒(méi)有必要的而事實(shí)上,每個(gè)對(duì)象都共享同一個(gè)函數(shù)。于是我們嘗試在函數(shù)之外去聲明其方法屬性。
在工廠函數(shù)外定義對(duì)象的方法
有些開(kāi)發(fā)者在工廠函數(shù)外定義對(duì)象的方法,然后通過(guò)屬性指向該方法,從而避免這個(gè)問(wèn)題:
function showColor() {
alert(this.color);
}
function createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
return oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //輸出 "red"
oCar2.showColor(); //輸出 "blue"
在上面這段重寫的代碼中,在函數(shù) createCar() 之前定義了函數(shù) showColor()。在 createCar() 內(nèi)部,賦予對(duì)象一個(gè)指向已經(jīng)存在的 showColor() 函數(shù)的指針。從功能上講,這樣解決了重復(fù)創(chuàng)建函數(shù)對(duì)象的問(wèn)題;但是從語(yǔ)義上講,該函數(shù)不太像是對(duì)象的方法。
- javascript設(shè)計(jì)模式 – 簡(jiǎn)單工廠模式原理與應(yīng)用實(shí)例分析
- Javascript設(shè)計(jì)模式理論與編程實(shí)戰(zhàn)之簡(jiǎn)單工廠模式
- js簡(jiǎn)單工廠模式用法實(shí)例
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動(dòng)態(tài)原型模式)
- JavaScript 模式之工廠模式(Factory)應(yīng)用介紹
- JavaScript設(shè)計(jì)模式之工廠模式和構(gòu)造器模式
- javascript 模式設(shè)計(jì)之工廠模式詳細(xì)說(shuō)明
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布者-訂閱者模式)
- JavaScript 設(shè)計(jì)模式之組合模式解析
- 常用的Javascript設(shè)計(jì)模式小結(jié)
- 常用的javascript設(shè)計(jì)模式
- JavaScript設(shè)計(jì)模式--簡(jiǎn)單工廠模式定義與應(yīng)用案例詳解
相關(guān)文章
JavaScript中用于生成隨機(jī)數(shù)的Math.random()方法
這篇文章主要介紹了JavaScript中用于生成隨機(jī)數(shù)的Math.random()方法,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06
JavaScript語(yǔ)言對(duì)Unicode字符集的支持詳解
這篇文章主要介紹了JavaScript語(yǔ)言對(duì)Unicode字符集的支持詳解,需要的朋友可以參考下2014-12-12
javascript語(yǔ)言結(jié)構(gòu)小記(一)
今天看了點(diǎn)js語(yǔ)言結(jié)構(gòu)的一部分,我將我比較感興趣地記錄如下,想學(xué)習(xí)js的朋友可以看下。2011-09-09
在JavaScript中操作時(shí)間之setYear()方法的使用
這篇文章主要介紹了在JavaScript中操作時(shí)間之setYear()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06
JavaScript 頁(yè)面坐標(biāo)相關(guān)知識(shí)整理
對(duì)于頁(yè)面的一些坐標(biāo)與位置分析,一般需要控制層的位置的朋友有幫助。需要的朋友可以參考下。2010-01-01
Javascript標(biāo)準(zhǔn)DOM Range操作全集
Javascript標(biāo)準(zhǔn)DOM Range操作全集...2007-01-01
JavaScript Math.ceil 方法(對(duì)數(shù)值向上取整)
js Math.ceil用于對(duì)數(shù)值向上取整,即得到大于或等于該數(shù)值的最小整數(shù),需要的朋友可以參考下2015-01-01

