JavaScript 設計模式之介面的實現

2021-07-13 08:14:51 字數 2674 閱讀 8069

在js中,並沒有真正意義上的介面,我們只能通過模擬的方式實現介面的效果,使用介面可以促進**的重用,降低**之間的耦合度,減少**錯誤及查詢錯誤原因,壞處就是加大**量,而且並不能強制程式設計師實現介面。js中模擬介面的方式有三種。

這種方式是使用注釋顯示的告訴程式設計師需要實現哪些介面,這種方式完全靠程式設計師的自覺性,並且是否真正實現了介面並不能檢查,對**的除錯不起任何幫助,相反正因為這種方式,不會對**效能產生影響。

/**

* 基於注釋的實現-介面**在注釋中,對於程式不起任何作用,僅僅是寫給程式設計師看。

* * 這是乙個game介面,具備乙個playgames方法

*public inte***ce game

* *

* 這是乙個food介面,具備乙個eat方法

* public inte***ce food

*/var person = function

(name) ;

//根據注釋的內容,自覺地實現介面中的方法

person.prototype.playgames = function

() ;

person.prototype.eat = function

() ;

//建立物件p

var p = new person("小明");

//呼叫方法

p.playgames();

這種方式是第一種方式的擴充套件,在物件的屬性中宣告需要實現的介面名,然後設計方式去檢測該物件是否實現了指定介面,這種方式缺點很明顯,並沒有辦法檢測是否真正實現了介面中的方法。

/**

* 基於注釋的實現-介面**在注釋中,對於程式不起任何作用,僅僅是寫給程式設計師看。

* * 這是乙個game介面,具備乙個playgames方法

*public inte***ce game

* *

* 這是乙個food介面,具備乙個eat方法

* public inte***ce food

*/var person = function

(name) ;

//根據注釋的內容,自覺地實現介面中的方法

person.prototype.playgames = function

() ;

person.prototype.eat = function

() ;

//建立物件p

var p = new person("小明");

//呼叫方法

p.playgames();

//定義乙個方法用於檢測person物件的類是否實現指定的介面

function

checkperson

(person) ;

//定義乙個公共方法用於檢測乙個物件的類是否實現指定的介面

function

checkimplements

(obj)

}if(!found) return

false;

}return

true;

}; //檢查物件p所在的類是否實現了介面

checkperson(p);

鴨式辨型(這個名稱來自james whitomb riley的名言:「像鴨子一樣走路並且嘎嘎叫的就是鴨子」),意思就是說,判斷乙個方法是否實現了介面,只需要看這個方法中是否包含介面中的所有方法,如果包含了,我們就可以認為這個方法實現了此介面。

1、首先定義乙個用於建立介面的函式

//定義乙個介面方法,引數為長度為2的陣列,陣列第乙個元素為物件介面物件,第二個元素為介面方法的陣列

var inte***ce = function

(name)

};

2、使用如上函式宣告2個介面並建立物件實現介面方法

//宣告倆個介面及介面的方法

var game = new inte***ce("game",["playgames"]);

var food = new inte***ce("food",["eat","throwfood"]);

var person = function

(name) ;

//實現介面的三個方法

person.prototype.playgames = function

() ;

person.prototype.eat = function

() ;

person.prototype.throwfood = function

() ;

//建立物件p

var p = new person("小明");

3、編寫方法檢測物件是否實現介面的方法

//用於檢測物件是否實現了介面的方法,引數為陣列,第乙個元素為物件,其餘元素為實現的介面物件

inte***ce.checkimplements = function

(obj)

}}

4、檢測物件是否實現的指定介面物件中的方法

function

checkperson

(person) ;

//檢測物件p是否實現了介面

checkperson(p);

實際使用中可以結合第一種方式一起使用

JavaScript設計模式之工廠模式

工廠模式是用來建立物件的一種最常用的設計模式。把建立物件的具體邏輯封裝在乙個函式中,那麼這個函式就可以被視為乙個工廠。工廠模式根據抽象程度的不同可以分為 簡單工廠,工廠方法和抽象工廠。簡單工廠模式又叫靜態工廠模式,由乙個工廠物件決定建立某一種產品物件類的例項。主要用來建立同一類物件的不同例項。fun...

JavaScript 設計模式之工廠模式

工廠模式的定義 工廠模式定義乙個用於建立物件的介面,這個介面由子類決定例項化哪乙個類。該模式使乙個類的例項化延遲到了子類。而子類可以重寫介面方法以便建立的時候指定自己的物件型別。工廠模式的使用場景 以下幾種情景下工廠模式特別有用 1 物件的構建十分複雜 2 需要依賴具體環境建立不同例項 3 處理大量...

JavaScript 設計模式之工廠模式

一 模式概念解讀 1.工廠模式概念文字解讀 工廠模式定義乙個用於建立物件的介面,這個介面由子類決定例項化哪乙個類。該模式使乙個類的例項化延遲到了子類。而子類可以重寫介面方法以便建立的時候指定自己的物件型別 抽象工廠 這個模式十分有用,尤其是建立物件的流程賦值的時候,比如依賴於很多設定檔案等。並且,會...