適配器模式(adapter_pattern)

適配器模式(Adapter Pattern)


適配器模式將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。


看個例子

還記得策略模式裏的鴨子接口嗎?假設這些鴨子類是屬於農場的,農場通過Quack和Fly觀察着鴨子的情況。今天這個農場又要多養一些火雞,農場主希望不要改變原來Quack和Fly的方法來觀察養的動物。如果直接讓火雞實現Duck接口也不太現實,火雞畢竟不是鴨子,火雞的叫法也不是Quack。不過,我們能否創建一支披着鴨皮的火雞呢?

type Ducky interface{
    Quack()
    Fly()
}

type Turkey interface{
    Gobble()
    Fly()
}

意圖

將類的接口轉換爲兼容的接口,一個適配器允許不兼容的類一起工作


組成部分

  • Target

    目標接口,一般是我們想用適配器轉換獲取的新的目標接口(Duck)

  • Adaptee

    被適配者,適配器應用的對象(Turkey)

  • Adapter

    適配器,轉換接口的類

在這裏插入圖片描述


實現方式

  • 對象適配器

    對象適配器的實現如上圖的A,非多繼承或繼承,用委託的方式。對象實現適配器模式,可以讓被適配者的子類都搭配着適配器使用。

  • 類適配器

    類適配器的實現如上圖的B,使用多繼承或繼承的方式來實現,好處在於不用像對象那樣實現所有的方法。


範例代碼

代碼:https://github.com/zxmfke/tech_learning_NoteOrBook/edit/master/design_pattern/adapter_pattern/example

分別用對象適配器和類適配器實現適配器模式範例代碼

這兩種方式的主要區別在於Adapter中Quack的實現方式

在這裏插入圖片描述


總結

  • 這個模式可以通過創建適配器進行接口轉換,讓不兼容的接口變成兼容。
  • 如果想要改變接口,適配器部分可以將改變的部分封裝起來,客戶就不必爲了應對不同的接口而每次跟着修改。
  • 客戶和被適配者是解耦的。
    的接口變成兼容。
  • 如果想要改變接口,適配器部分可以將改變的部分封裝起來,客戶就不必爲了應對不同的接口而每次跟着修改。
  • 客戶和被適配者是解耦的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章