javascript 模式設(shè)計(jì)之工廠模式學(xué)習(xí)心得
更新時(shí)間:2010年04月27日 14:24:33 作者:
接口的實(shí)現(xiàn),從而使不同子類可以被同等的對(duì)待,恰當(dāng)?shù)氖褂霉S模式,但不要拘泥與形式,理解本質(zhì)。
模式類型:工廠模式
模式說(shuō)明:常用模式之一,用來(lái)動(dòng)態(tài)創(chuàng)建對(duì)象
適用范圍:在運(yùn)行期間需要在一系列可互換的子類中進(jìn)行選擇的類
注意事項(xiàng):接口的實(shí)現(xiàn),從而使不同子類可以被同等的對(duì)待,恰當(dāng)?shù)氖褂霉S模式,但不要拘泥與形式,理解本質(zhì)。
關(guān)鍵點(diǎn):以 函數(shù)/類/子類 構(gòu)建的選擇器
本質(zhì):函數(shù)作為選擇器的使用
一般使用形式:
作為獨(dú)立的選擇器存在:
function FactoryMode(index){
switch(index){
case "index1" :
return new Class1();break;
case "index2":
return new Class2();break;
case "index3":
return new Class3();break;
default:return new ClassComm();break;
}
}
或作為類的一個(gè)方法存在:
var MainClass=function(){};//主類構(gòu)造器
MainClass.prototype={
FactoryMode:function(){}//子類選擇器
}
又或隱式選擇,即不以使用者的主觀選擇而選擇:
var xmlRequest=function(){
if(this.isOffOnline()){
xhr= new OfflineHandler();
}//如果此時(shí)網(wǎng)絡(luò)不可用,創(chuàng)建可緩存AJAX對(duì)象
else if(this.isHightLatency()){
xhr= new QueuedHandler();
}//如果網(wǎng)絡(luò)延遲較大,創(chuàng)建隊(duì)列形式AJAX對(duì)象
else {
xhr=new SimpleHandler();
}//如果網(wǎng)絡(luò)正常,創(chuàng)建簡(jiǎn)單AJAX對(duì)象
interface.ensureImplements(xhr,AjaxHandler);
//檢查對(duì)象是否實(shí)現(xiàn)了接口,從而確保以后的工作可以順利進(jìn)行
return xhr;
}
延伸:
工廠模式的本質(zhì)就是選擇器的應(yīng)用,選擇器不僅可作為對(duì)象的選擇,還可作為函數(shù)的選擇,類的選擇,參數(shù)的選擇
函數(shù)的選擇,如:
var addEvent=(function(){
if(!-[0,]){
return function(elem,type,handler){
elem[type+handler.toString()]=handler;
elem.attachEvent("on"+type,elem[type+handler.toString]);
}}//if IE
else {
return function(elem,type,handler){
elem.addEventListener(type,handler,false);
}
}
})();//避免多次判斷
類的選擇:
var suitableClass=function(){
if(match condition A) return Class1;
else if(match condition B) return Class2;
else return ClassComm;
}
參數(shù)的選擇:
function Country(country){
if(country=="China")
this.config={};//設(shè)置基本參數(shù)1
else if(contry=="America")
this.config={};//設(shè)置參數(shù)2
else if()
.......//等等
}
Country.prototype={};
模式說(shuō)明:常用模式之一,用來(lái)動(dòng)態(tài)創(chuàng)建對(duì)象
適用范圍:在運(yùn)行期間需要在一系列可互換的子類中進(jìn)行選擇的類
注意事項(xiàng):接口的實(shí)現(xiàn),從而使不同子類可以被同等的對(duì)待,恰當(dāng)?shù)氖褂霉S模式,但不要拘泥與形式,理解本質(zhì)。
關(guān)鍵點(diǎn):以 函數(shù)/類/子類 構(gòu)建的選擇器
本質(zhì):函數(shù)作為選擇器的使用
一般使用形式:
作為獨(dú)立的選擇器存在:
復(fù)制代碼 代碼如下:
function FactoryMode(index){
switch(index){
case "index1" :
return new Class1();break;
case "index2":
return new Class2();break;
case "index3":
return new Class3();break;
default:return new ClassComm();break;
}
}
或作為類的一個(gè)方法存在:
復(fù)制代碼 代碼如下:
var MainClass=function(){};//主類構(gòu)造器
MainClass.prototype={
FactoryMode:function(){}//子類選擇器
}
又或隱式選擇,即不以使用者的主觀選擇而選擇:
復(fù)制代碼 代碼如下:
var xmlRequest=function(){
if(this.isOffOnline()){
xhr= new OfflineHandler();
}//如果此時(shí)網(wǎng)絡(luò)不可用,創(chuàng)建可緩存AJAX對(duì)象
else if(this.isHightLatency()){
xhr= new QueuedHandler();
}//如果網(wǎng)絡(luò)延遲較大,創(chuàng)建隊(duì)列形式AJAX對(duì)象
else {
xhr=new SimpleHandler();
}//如果網(wǎng)絡(luò)正常,創(chuàng)建簡(jiǎn)單AJAX對(duì)象
interface.ensureImplements(xhr,AjaxHandler);
//檢查對(duì)象是否實(shí)現(xiàn)了接口,從而確保以后的工作可以順利進(jìn)行
return xhr;
}
延伸:
工廠模式的本質(zhì)就是選擇器的應(yīng)用,選擇器不僅可作為對(duì)象的選擇,還可作為函數(shù)的選擇,類的選擇,參數(shù)的選擇
函數(shù)的選擇,如:
復(fù)制代碼 代碼如下:
var addEvent=(function(){
if(!-[0,]){
return function(elem,type,handler){
elem[type+handler.toString()]=handler;
elem.attachEvent("on"+type,elem[type+handler.toString]);
}}//if IE
else {
return function(elem,type,handler){
elem.addEventListener(type,handler,false);
}
}
})();//避免多次判斷
類的選擇:
復(fù)制代碼 代碼如下:
var suitableClass=function(){
if(match condition A) return Class1;
else if(match condition B) return Class2;
else return ClassComm;
}
參數(shù)的選擇:
復(fù)制代碼 代碼如下:
function Country(country){
if(country=="China")
this.config={};//設(shè)置基本參數(shù)1
else if(contry=="America")
this.config={};//設(shè)置參數(shù)2
else if()
.......//等等
}
Country.prototype={};
您可能感興趣的文章:
- JavaScript設(shè)計(jì)模式--簡(jiǎn)單工廠模式定義與應(yīng)用案例詳解
- javascript設(shè)計(jì)模式 – 簡(jiǎn)單工廠模式原理與應(yīng)用實(shí)例分析
- Javascript設(shè)計(jì)模式理論與編程實(shí)戰(zhàn)之簡(jiǎn)單工廠模式
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動(dòng)態(tài)原型模式)
- js面向?qū)ο笾R?jiàn)創(chuàng)建對(duì)象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)
- JavaScript 模式之工廠模式(Factory)應(yīng)用介紹
- JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布者-訂閱者模式)
- 常用的Javascript設(shè)計(jì)模式小結(jié)
- 常用的javascript設(shè)計(jì)模式
- JavaScript設(shè)計(jì)模式--簡(jiǎn)單工廠模式實(shí)例分析【XHR工廠案例】
相關(guān)文章
JavaScript 設(shè)計(jì)模式 安全沙箱模式
沙箱模式常見(jiàn)于YUI3 core,它是一種采用同一構(gòu)造器(Constructor)生成彼此獨(dú)立且互不干擾(self-contained)的實(shí)例對(duì)象,而從避免污染全局對(duì)象的方法2010-09-09
javascript面向?qū)ο蟮姆绞綄?shí)現(xiàn)的彈出層效果代碼
由于本人以前是.net程序員,所以即使現(xiàn)在在做前端,也習(xí)慣于用面向?qū)ο蟮姆绞骄帉?xiě)js腳本,我想如果你以前也是或者現(xiàn)在還是名第三代程序員的話,應(yīng)該對(duì)此并不陌生。2010-01-01
Javascript 類與靜態(tài)類的實(shí)現(xiàn)(續(xù))
由于MM的事件已干完,接著我們的靜態(tài)類的實(shí)現(xiàn)。這東西在Javascript里用得會(huì)非常的頻繁,因?yàn)獒槍?duì)現(xiàn)在的網(wǎng)頁(yè),多個(gè)基于同一個(gè)類對(duì)象的頁(yè)面不多,往往不同塊對(duì)象的交互就可以解決問(wèn)題了,這就需要在JS針對(duì)元素定義幾個(gè)靜態(tài)類就可以完事了,進(jìn)入正題。2010-04-04
javascript new一個(gè)對(duì)象的實(shí)質(zhì)
javascript 中,new一個(gè)對(duì)象的實(shí)質(zhì)是什么?即,當(dāng)我們構(gòu)建一個(gè)類的實(shí)例的時(shí)候,真正做了些什么?2010-01-01
javascript中類的定義及其方式(《javascript高級(jí)程序設(shè)計(jì)》學(xué)習(xí)筆記)
javascript也是一種面向?qū)ο蟮木幊陶Z(yǔ)言。但是javascript中的類相關(guān)的東西(類的定義,原型鏈,繼承等)卻不是很好理解,特別是繼承。2011-07-07
javascript 面向?qū)ο缶幊袒A(chǔ):繼承
"繼承是面向?qū)ο箝_(kāi)發(fā)的又一個(gè)重要概念,它可以將現(xiàn)實(shí)生活的概念對(duì)應(yīng)帶程序邏輯中"。“ 雖然在JavaScript中沒(méi)有專門(mén)的機(jī)制來(lái)實(shí)現(xiàn)類的繼承,但可以通過(guò)拷貝一個(gè)類的prototype 到另外一個(gè)類來(lái)實(shí)現(xiàn)繼承”。2009-08-08

