適配器模式
適配器模式:將一個類的接口轉換成另一種接口.讓原本接口不兼容的類可以兼容
適配器模式(Adapter Pattern):將一個接口轉換成客戶希望的另一個接口,使接口不兼容的那些類可以一起工作,其別名爲包裝器(Wrapper)。適配器模式既可以作爲類結構型模式,也可以作爲對象結構型模式。
在適配器模式中,我們通過增加一個新的適配器類來解決接口不兼容的問題,使得原本沒有任何關係的類可以協同工作。
根據適配器類與適配者類的關係不同,適配器模式可分爲對象適配器和類適配器兩種,在對象適配器模式中,適配器與適配者之間是關聯關係;在類適配器模式中,適配器與適配者之間是繼承(或實現)關係。
角色
Target(目標抽象類):目標抽象類定義客戶所需接口,可以是一個抽象類或接口,也可以是具體類。
Adapter(適配器類):適配器可以調用另一個接口,作爲一個轉換器,對Adaptee和Target進行適配,適配器類是適配器模式的核心,在對象適配器中,它通過繼承Target並關聯一個Adaptee對象使二者產生聯繫。
Adaptee(適配者類):適配者即被適配的角色,它定義了一個已經存在的接口,這個接口需要適配,適配者類一般是一個具體類,包含了客戶希望使用的業務方法,在某些情況下可能沒有適配者類的源代碼。
code :已存在的將被適配的類
public class Adaptee {
public void adapteeRequest() {
System.out.println("被適配者的方法");
}
}
一個目標接口:
public interface Target {
void request();
}
怎麼纔可以在目標接口中的 request() 調用 Adaptee 的 adapteeRequest() 方法呢?
如果通過一個適配器類,實現 Target 接口,同時繼承了 Adaptee 類,然後在實現的 request() 方法中調用父類的 adapteeRequest() 即可實現
public class Adapter extends Adaptee implements Target{
@Override
public void request() {
//...一些操作...
super.adapteeRequest();
//...一些操作...
}
}
這樣我們即可在新接口 Target 中適配舊的接口或類
對象適配器
對象適配器與類適配器不同之處在於,類適配器通過繼承來完成適配,對象適配器則是通過關聯來完成,這裏稍微修改一下 Adapter 類即可將轉變爲對象適配器
public class Adapter implements Target{
// 適配者是對象適配器的一個屬性
private Adaptee adaptee = new Adaptee();
@Override
public void request() {
//...
adaptee.adapteeRequest();
//...
}
}