將一類的介面轉換成客戶希望的另外乙個介面,adapter模式使得原本由於介面不相容而不能一起工作那些類可以一起工作。
適用情況:
使用的前提是:介面中規定了所有要實現的方法; 但乙個要實現此介面的具體類,只用到了其中的幾個方法,而其它的方法都是沒有用的。
實現方法:
用乙個抽象類實現已有的介面,並實現介面中所規定的所有方法,這些方法的實現可以都是空方法;
原本要實現介面的子類,只實現上面的抽象類即可,並在其內部實現時,只對其感興趣的方法進行實現;
類圖:
角色:目標介面(target): 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。
需要適配的類(adaptee): 需要適配的類或適配者類。
介面卡(adapter): 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。
例項:public inte***ce target
public class adaptee
}public class adapter implements target
}public class client
}主要內容:
1) 類介面卡
當客戶在介面中定義了他期望的行為時,我們就可以應用介面卡模式,提供乙個實現該介面的類,並且擴充套件已有的類,通過建立子類來實現適配。
2)物件介面卡
物件介面卡通過組合除了滿足"使用者期待的介面"還降低了**間的不良耦合。
3)預設介面卡
預設介面卡模式是一種特殊的介面卡模式,但這個介面卡是由乙個抽象類實現的,並且在抽象類中要實現目標介面中所規定的所有方法,但很多方法的實現都是空方法,而具體的子類都要繼承此抽象類。
類介面卡和物件介面卡
類介面卡模式採用的是多重繼承的方式
class adapter extends adaptee implements target
....
}物件介面卡採用的是包含的方式
class adapter implements taget
...}
兩者的區別我認為有以下幾點
1.類介面卡模式需要建立自身來建立乙個adaptee,物件介面卡模式可以直接使用乙個已有的adaptee的例項來轉換介面。
2. 類介面卡繼承了adaptee,所以可以通過覆寫來擴充套件specificrequest(), 物件介面卡和adaptee是包含關係不能擴充套件;(其實也可以擴充套件的見下面)
3.類介面卡模式因為是繼承所以相對靜態,而物件介面卡模式是包含是組合相對靈活(可以通過寫adaptee子類擴充套件功能)
意圖:將乙個類的介面轉換成客戶希望的另外乙個介面。此模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作
java設計模式(五) 介面卡模式
將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。1.你想使用乙個已經存在的類,而它的介面不符合你的需求。2.你想建立乙個可以復用的類,該類可以與其他不相關的類或不可預見的類 即那些介面可能不一定相容的類 協同工作。3.僅適用於物...
設計模式 五 介面卡模式
package zzq.designpatterns.structuralpattern 介面卡模式 adapter 的定義如下 將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。介面卡模式分為類結構型模式和物件結構型模式兩種,前者類之間的耦合度比後...
設計模式(五) 介面卡模式
1.描述 將乙個類的介面轉換成客戶希望的另乙個介面。adapter模式使得原本由於介面比相容而不能一起工作的那些類可以一起工作。2.優點 目標 target 與被適配者 adaptee 是完全解耦關係。滿足 開閉原則 3.使用情景 乙個程式想使用已存在的類,但該類所實現的介面和當前程式所使用的介面不...