設計模式之介面卡模式

2022-08-13 06:51:12 字數 2077 閱讀 8442

dec 7, 2014

我們來舉乙個例子,鴨子(dock)有飛(fly)和嘎嘎叫(quack)的行為,而火雞雖然也有飛(fly)的行為,但是其叫聲是咯咯的(gobble)。如果你非要火雞也要實現嘎嘎叫(quack)這個動作,那我們可以復用鴨子的 quack 方法,但是具體的叫還應該是咯咯的,此時,我們就可以建立乙個火雞的介面卡,以便讓火雞也支援 quack 方法,其內部還是要呼叫 gobble。

ok,我們開始一步一步實現,首先要先定義鴨子和火雞的抽象行為,也就是各自的方法函式:

//鴨子

var duck = function();

duck.prototype.fly = function();

duck.prototype.quack = function()

//火雞

var turkey = function();

turkey.prototype.fly = function();

turkey.prototype.gobble = function();

然後再定義具體的鴨子和火雞的建構函式,分別為:

//鴨子

var mallardduck = function () ;

mallardduck.prototype = new duck(); //原型是duck

mallardduck.prototype.fly = function () ;

mallardduck.prototype.quack = function () ;

//火雞

var wildturkey = function () ;

wildturkey.prototype = new turkey(); //原型是turkey

wildturkey.prototype.fly = function () ;

wildturkey.prototype.gobble = function () ;

為了讓火雞也支援 quack 方法,我們建立了乙個新的火雞介面卡 turkeyadapter:

var turkeyadapter = function(oturkey);

turkeyadapter.prototype = new duck();

turkeyadapter.prototype.quack = function();

turkeyadapter.prototype.fly = function()

};呼叫方法,就很明了了,測試一下便可以知道結果了:

var omallardduck = new mallardduck();

var owildturkey = new wildturkey();

var oturkeyadapter = new turkeyadapter(owildturkey);

//原有的鴨子行為

omallardduck.fly();

omallardduck.quack();

//原有的火雞行為

owildturkey.fly();

owildturkey.gobble();

//介面卡火雞的行為(火雞呼叫鴨子的方法名稱)

oturkeyadapter.fly();

oturkeyadapter.quack();

那合適使用介面卡模式好呢?如果有以下情況出現時,建議使用:

使用乙個已經存在的物件,但其方法或屬性介面不符合你的要求;

你想建立乙個可復用的物件,該物件可以與其它不相關的物件或不可見物件(即介面方法或屬性不相容的物件)協同工作;

想使用已經存在的物件,但是不能對每乙個都進行原型繼承以匹配它的介面。物件介面卡可以適配它的父物件介面方法或屬性。

另外,介面卡模式和其它幾個模式可能容易讓人迷惑,這裡說一下大概的區別:

介面卡和橋接模式雖然類似,但橋接的出發點不同,橋接的目的是將介面部分和實現部分分離,從而對他們可以更為容易也相對獨立的加以改變。而介面卡則意味著改變乙個已有物件的介面。

裝飾者模式增強了其它物件的功能而同時又不改變它的介面,因此它對應程式的透明性比介面卡要好,其結果是裝飾者支援遞迴組合,而純粹使用介面卡則是不可能的。

**模式在不改變它的介面的條件下,為另外乙個物件定義了乙個**。

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...

設計模式之 介面卡模式

1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...

設計模式之介面卡模式

介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...