介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。
作用類似於三相插頭到兩相插頭轉換器(介面卡)所起的作用。
結構介面卡模式有類的介面卡模式和物件的介面卡模式這兩種不同的形式。
類介面卡模式
把適配類的api轉換成目標類的api,見下圖:
adaptee類沒有sampleoperation2方法,而客戶端需要使用這個方法。adapter類繼承了adaptee類,把adaptee類的api與target類的api銜接起來。
涉及到的角色:
目標(target)角色:類介面卡模式中目標不可以是類,只能是介面。
源(adapee)角色:具體類。
介面卡(adaper)角色:具體類。
1 public inte***ce target
1 public class adaptee4 5 }
1 public class adapter extends adaptee implements target物件介面卡模式10 11 }
物件的介面卡模式把被適配的類的api轉換成為目標類的api,使用委派關係連線到adaptee類,見下圖:
adapter與adaptee是委派關係。
1 public inte***ce target
1 public class adaptee4
5 }
1 public class adapter類介面卡和物件介面卡比較:7 /**
8 * 源類adaptee有方法sampleoperation1
9 * 因此介面卡類直接委派即可
10 */
11 public void sampleoperation1()
14 /**
15 * 源類adaptee沒有方法sampleoperation2
16 * 因此由介面卡類需要補充此方法
17 */
18 public void sampleoperation2()
21 }
類介面卡使用繼承方式,不能訪問adaptee子類,可以重寫父類方法;而物件介面卡使用物件組合方式,可以訪問adaptee子類,不能重寫父類方法。
盡量使用物件介面卡,少用繼承。
優點:更好的復用性和擴充套件性。
缺點:過多的介面卡會使系統變得混亂。
預設適配模式
作為介面卡模式的乙個特例,預設適配(default adapter)模式為乙個介面提供預設實現,子型別可以擴充套件這個預設實現,不必擴充套件原有介面。
魯智深的故事
和尚要做什麼呢?吃齋、念經、打坐、撞鐘、習武等。給出所有和尚都需要實現的方法對應的介面:
1 public inte***ce 和尚下面的魯智深類通不過編譯:
1 public class 魯智深 implements 和尚當初魯達剃度,眾僧說:「此人形容醜惡、相貌凶頑,不可剃度他",但是長老卻說:」此人上應天星、心地剛直。雖然時下凶頑,命中駁雜,久後卻得清淨。證果非凡,汝等皆不及他。」「應」者,實現也;「天星」者,抽象類也。9 public string getname()
12 }
1 public abstract class 天星 implements 和尚抽象的天星類是乙個介面卡類,實現了和尚介面所要求的所有方法。3 public void 念經(){}
4 public void 打坐(){}
5 public void 撞鐘(){}
6 public void 習武(){}
7 public string getname()
10 }
魯智深類繼承抽象類「天星」:
1 public class 魯智深 extends 天星介面卡模式目的是與目標介面相容,預設適配模式目的是提供介面的一般實現類。如果不準備實現乙個介面的所有方法,可以使用預設適配模式來建立乙個抽象類,給出所有方法的一般實現,繼承該抽象類的子類不必實現所有方法。9 public string getname()
12 }
JAVA設計模式之介面卡模式
先總結一下整個過程的感想 感覺在網上找了很多資料,大部分大牛們把這個設計模式解釋的很仔細,但是用詞實在過於專業,很難讓初學者讀懂,自己找了乙個比較恰當的例子寫了一遍,對這個設計模式有了一定的認識,希望這種解釋可以得到認可。其實總結一下介面卡模式的最終目的 在乙個沒有實現某個介面的類,想在這個介面中規...
Java設計模式之介面卡模式
1 使用場景 介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面。以消除由於介面的不匹配所造成類的相容性問題。介面卡模式主要有類的介面卡模式 物件的介面卡模式兩種。2 兩種介面卡模式介紹 模式所涉及的角色有 目標 target 角色 這就是所期待得到的介面。源 adapee 角色 現在需要適配的...
Java設計模式之介面卡模式
介面卡就是一種適配中介軟體,它存在於不匹配的二者之間,用於連線二者,將不匹配變得匹配,簡單點理解就是平常所見的轉接頭,轉換器之類的存在。介面卡模式有兩種 類介面卡和物件介面卡 二者在實現上有些許區別,作用一樣。1 類介面卡模式 原理 通過繼承來實現介面卡功能。當我們要訪問的介面a中沒有我們想要的方法...