《設計模式》- 適配器模式

定義

適配器模式把一個類的接口變成客戶端所期待的另外一個接口,從而使本來不匹配而沒法在一塊兒工做的兩個類可以在一塊兒工做java

使用場景

  • 系統須要現有的類,而此類的接口不符合系統的需求,即接口不兼容。
  • 想要創建一個能夠重複使用的類,用於一些彼此之間沒有太大關聯的一些類,包括一些可能在未來引進的類一塊兒工做。
  • 須要一個統一的輸出接口,可是輸入端的類型不可預知。

UML 類圖

適配器模式分爲兩種,類適配器模式和對象適配器模式markdown

  1. 類適配器模式
classDiagram
Target <|.. Adapter
Adaptee <|-- Adapter

class Target{
    <<interface>>
    +operation1()
    +operation2()
}
class Adapter{
    +operation2()
}
class Adaptee{
    +operation3()
}
  • Target 目標角色,也就是所期待獲得的接口。注意這裏不是類
  • Adaptee 如今須要適配的類
  • Adapter 適配器,把現有的類適配成所須要的接口

類適配器簡單實例

//Target 角色,須要5V電壓
public interface FiveVolt{
    int getVolt5();
}

//adaptee 角色,提供220V 電壓
public class Vlot220{
    pulic int getVlot220(){
        return 220;
    }
}

//adapter 角色,將220V 電壓轉換成5V 電壓
public class VlotAdapter extends Vlot220 implements FiveVolt{
    public int getVolt5(){
        return 220to5Vlot();
    }
    
    private int 220to5Vlot(){
        return 5;
    }
}  

//使用
public class Test{
    public static void main(String[] args){
        VlotAdapter adapter = new VlotAdapter();
        adapter.getVolt5();
    }
}
複製代碼
  1. 對象適配器
classDiagram
Target <|.. Adapter
Adaptee <.. Adapter

class Target{
    <<interface>>
    +operation1()
    +operation2()
}
class Adapter{
    +operation2()
}
class Adaptee{
    +operation3()
}

從類圖上能夠看出,對類適配器和象適配器的不一樣主要是在Adapter 和 Adaptee 的關係上;前者是繼承,後者是組合。spa

對象適配器簡單實例

//adapter 角色
public class VoltAdapter implements FiveVolt{
    Volt220 mVolt220;
    public VoltAdapter(Volt220 adaptee){
        mVolt220 = adaptee;
    }
    
    public int getVolt5(){
        return 220to5Vlot();
    }
    
    private int 220to5Vlot(){
        return 5;
    }

}

//使用
public class Test{
    public static void main(String[] args){
        VlotAdapter adapter = new VlotAdapter(new Volt220());
        adapter.getVolt5();
    }
}
複製代碼

小結

這種實現方式直接將要被適配的對象牀底到Adapter 中,使用組合的形式實現接口兼容的效果。這筆類適配器方式更靈活,它的另外一個好處是被適配對象中的方法不會被暴露出去,類適配器模式因爲繼承了被適配對象,所以被適配對象的方法在Adapter 類中也會有,這使得Adapter 類會多出一些奇怪的方法,用戶使用成本較高。所以,對象適配器更爲靈活、實用。code

相關文章
相關標籤/搜索