適配器模式(8)

適配器模式

適配器模式:將一個類的接口轉換成另一種接口.讓原本接口不兼容的類可以兼容
適配器模式(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();
        //...
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章