設計模式GOF23——適配器模式

適配器模式(adapter)是結構性模式的一種。結構型模式的核心作用是從程序的結構上實現低耦合,從而可以擴大整體的類結構,用來解決更大的問題。

模式的使用場景

將一個類的接口換成客戶需要的另外一個接口,Adapter模式使得原本不兼容不能在一起工作的那些類可以在一起工作。
經常用於舊系統的改造升級。
在java.io.InputStreamReader(InputStream)和java.io.OutputStreamWriter(OutputStream)用到

模式中的角色

目標接口(Target):客戶期待的接口。目標可以是具體的也可以是抽象的類,也可以是接口。
需要適配的類(adaptee):需要適配的類,或者配置類。
適配器(adapter):通過包裝一個合適的對象,把原接口轉換成目標接口。

模式的實現

//被適配的類
public class Adaptee {
    //被適配的方法
    public void request(){
        //被適配的類的操作
    }
}
//修改後的接口
public interface Target {
    //修改後接口的方法
    void handleReq();
}
//適配器類
public class Adapter extends Adaptee implements Target{
    //適配器的適配方法,這裏是用繼承的方式實現的
    public void handleReq() {
        super.request();

    }
}
//使用類
public class Client {
    //使用類調用適配器的方法
    public void test1(Target t){
        t.handleReq();
    }
    //具體使用(繼承方式的使用)
    public static void main(String[] args) {
        Client c = new Client();
        Target t = new Adapter();
        c.test1(t);
    }
}

其實適配器不止可以用上述的繼承方式,也可以用下面的組合的方式

//適配器類
public class Adapter implements Target{
    private Adaptee adaptee;
    //適配器的適配方法,這裏是用組合的方式實現的
    public void handleReq() {
        adaptee.request();
    }
    public Adapter(Adaptee a){
        super();
        this.adaptee = a;
    }
}
//使用類
public class Client {
    //使用類調用適配器的方法
    public void test1(Target t){
        t.handleReq();
    }
    //具體使用(組合方式的使用)
    public static void main(String[] args) {
        Client c = new Client();
        Adaptee a = new Adaptee();
        Target t = new Adapter(a);
        c.test1(t);
    }
}

繼承的方式使用時代碼少一點,但是Java只能但繼承,組合的方式雖然對了一個對象的創建,但是讓程序的擴展性會變得更好了。

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