javascript 模式設計之原廠模式學習心得

來源:互聯網
上載者:User

模式類型:原廠模式

模式說明:常用模式之一,用來動態建立對象

適用範圍:在運行期間需要在一系列可互換的子類中進行選擇的類

注意事項:介面的實現,從而使不同子類可以被同等的對待,恰當的使用原廠模式,但不要拘泥與形式,理解本質。

關鍵點:以 函數/類/子類 構建的選取器

本質:函數作為選取器的使用

一般使用形式:

作為獨立的選取器存在:

複製代碼 代碼如下: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;
}
}

或作為類的一個方法存在:

複製代碼 代碼如下:var MainClass=function(){};//主類構造器
MainClass.prototype={
FactoryMode:function(){}//子類別選取器
}

又或隱含選取,即不以使用者的主觀選擇而選擇:

複製代碼 代碼如下:var xmlRequest=function(){
if(this.isOffOnline()){
xhr= new OfflineHandler();
}//如果此時網路不可用,建立可緩衝AJAX對象
else if(this.isHightLatency()){
xhr= new QueuedHandler();
}//如果網路延遲較大,建立隊列形式AJAX對象
else {
xhr=new SimpleHandler();
}//如果網路正常,建立簡單AJAX對象
interface.ensureImplements(xhr,AjaxHandler);
//檢查對象是否實現了介面,從而確保以後的工作可以順利進行
return xhr;
}

延伸:

原廠模式的本質就是選取器的應用,選取器不僅可作為對象的選擇,還可作為函數的選擇,類的選擇,參數的選擇

函數的選擇,如: 複製代碼 代碼如下: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;
}

參數的選擇:

複製代碼 代碼如下:function Country(country){
if(country=="China")
this.config={};//設定基本參數1
else if(contry=="America")
this.config={};//設定參數2
else if()
.......//等等
}
Country.prototype={};
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.