Java設計模式之適配器模式

1、使用場景

適配器模式把一個類的接口變換成客戶端所期待的另一種接口。以消除由於接口的不匹配所造成類的兼容性問題。適配器模式主要有類的適配器模式、對象的適配器模式兩種。

2、兩種適配器模式介紹

模式所涉及的角色有:

  目標(Target)角色:這就是所期待得到的接口。

  源(Adapee)角色:現在需要適配的接口。

  適配器(Adaper)角色:適配器類是本模式的核心。適配器把源接口轉換成目標接口。(充當中間角色)

1)類的適配器模式

類的適配器模式把適配的類(即源類)的API轉換成爲目標類的API。

由於是類適配器模式,因此目標不可以是類,適配器不可以是接口而必須是類。

public interface Target {

    /**

     * 這是源類Source也有的方法

     */

    public void sampleOperation1(); 

    /**

     * 這是源類Source沒有的方法

     */

    public void sampleOperation2(); 

}

上面是目標角色的源代碼,這個接口聲明瞭兩個方法:sampleOperation1()sampleOperation2()。而源角色Source是一個具體類,它有一個sampleOperation1()方法,但是沒有sampleOperation2()方法。

public class Source{    

    public void sampleOperation1(){}

 

}

 

適配器角色Adapter擴展了Source,同時又實現了目標(Target)接口。由於Source沒有提供sampleOperation2()方法,而目標接口又要求這個方法,因此適配器角色Adapter實現了這個方法。

public class Adapter extends Source implements Target {

    /**

     * 由於源類Source 沒有方法sampleOperation2()

     * 因此適配器補充上這個方法

     */

    @Override

    public void sampleOperation2() {

        //寫相關的代碼

    }

}

2)對象的適配器模式

與類的適配器模式一樣,對象的適配器模式把被適配的類的API轉換成爲目標類的API但對象的適配器模式不是使用繼承關係連接到Source類,而是使用委派關係連接到Source類。

public class Adapter implements Target{

    private Source source;

    

    public Adapter(Source source){

        this.source = source;

    }

    /**

     * 源類Source有方法sampleOperation1

     * 因此適配器類直接委派即可

     */

    public void sampleOperation1(){

        this.source.sampleOperation1();

    }

    /**

     * 源類Source沒有方法sampleOperation2

     * 因此由適配器類需要補充此方法

     */

    public void sampleOperation2(){

        //寫相關的代碼

    }

}

爲使客戶端能夠使用Source類,需要提供一個包裝(Wrapper)Adapter。這個包裝類包裝了一個Source的實例,從而此包裝類能夠把Source的APITarget類的API銜接起來。AdapterSource是委派關係,這決定了適配器模式是對象的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章