Java 大白話講解設計模式之 -- 適配器模式

聲明:原創作品,轉載請註明出處https://www.jianshu.com/p/57f74d555068

今天總結下適配器模式,適配器模式的作用是將一個接口轉換成用戶期待的接口,也就是可以把兩個不兼容的接口放在一起工作。這樣講可能有點抽象,接下里看下這個設計模式在代碼中的體現。

適配器模式分兩種,對象適配器模式類適配器模式,先來看下對象適配模式。

1.對象適配器模式

看到適配器這個名字,我們自然而然就會想到電源適配器,或者叫充電器,所以就拿手機充電器來舉個例子。我們知道給手機充電時,所需要的電壓是比較小的,一般也就5v左右,但是我們家裏的插座提供的電源都是220v,我們不可能直接把我們的手機接到220v的電源下,不然手機直接原地爆炸。所以這就出現了一個問題,就是兩邊的電壓不對等,或者說兩邊的接口即輸出電流的接口和接入手機的接口不兼容。那這時手機的電源適配器或者說充電器就出現了,通過一個轉換頭把220v電壓轉爲手機可承受的5v電壓,這樣手機就充上電了。然後我們看下這個例子用代碼如何體現:
首先我們需要定義一個目標接口,也就是我們需要的接口,在這裏就表示手機需要一個type-c接口;

//手機需要接入這個type-c接口
interface TypeC {
  //這個接口輸出5v電壓
  void v5();
}

接着有一個插座類,提供220v的電源:

class Socket {
  public void v220() {
    System.out.println("接入220v電源");
   }
}

接下來我們需要定義一個適配器類來把220v的電源轉換爲手機需要的5v電源:

class PowerAdapter implements TypeC {
  public Socket socket;
  public void plugIntoSocket(Socket socket) {
    this.socket = socket;
  }
  @Override
  public void v5() {
    socket.v220();
  }
}

接着看下客戶端的調用過程:

PowerAdapter powerAdapter = new PowerAdapter();
Socket socket = new Socket();
powerAdapter.plugIntoSocket(socket);
powerAdapter.v5();

代碼邏輯很清晰,首先創建了一個適配器對象PowerAdapter和插座對象Socket,接着調用PowerAdapter的plugIntoSocket方法把適配器插到220v的電源插座上,這樣PowerAdapter對象就有了一個插座Socket的依賴,接着調用我們的目標接口也就是PowerAdapter的v5方法,而這個方法內部其實調用Socket的v220方法,這樣我們就通過PowerAdapter這個適配器把220v電壓轉換成了我們需要的5v電壓。也就是通過這個適配器我們把不兼容的兩個接口可以一起工作了。在適配器模式中我們把PowerAdapter叫做適配器Adapter,把Socket叫做被適配者Adaptee,把我們需要調用的接口TypeC叫做目標接口Target,這裏我們被適配者Adapee是作爲一個實例對象被依賴所以我們叫上面這種形式的適配器模式叫做對象適配器模式
我們來看下對象適配器模式的類圖:

2.類適配器模式

接下來我們看下類適配器模式,我們還是舉上面手機充電的例子。首先我們同樣需要定義一個目標接口和一個插座類即被適配類,和上面不變

目標接口(Target)

//手機需要接入這個type-c接口
interface TypeC {
  //這個接口輸出5v電壓
  void v5();
}

被適配類(Adaptee)

class Socket {
  public void v220() {
    System.out.println("接入220v電源");
   }
}

接下來還是需要定義一個適配器類,不過實現和上面有點不同:

適配器(Adapter)

class PowerAdapter extends Socket implements TypeC {
  @Override
  public void v5() {
    this.v220();
  }
}

可以看到這裏和上面的一樣同樣實現了Typec接口,不同的是上面通過plugIntoSocket方法引入了Socket對象,而這裏PowerAdapter是直接繼承了Socket類,這樣當我們調用v5這個方法時,就直接可以調用到v220這個方法,來實現接口的轉換。我們稱這種適配器模式爲類適配器模式

最後看下類適配模式類圖

3.總結

適配器模式在我們項目中往往扮演的是一個救火員的角色,它可以解決新老版本接口不兼容的問題,引入適配器來達到解耦的目的,當然我們還是儘量在項目中少用到適配器模式,我們應該在項目一開始的時候對項目要有一個全局的把控,而不是到了出問題了才用適配器來救火,如果用到太多的適配器,反而使項目變得複雜。

到這適配器模式分析的差不多了,相信你對適配器模式有了一定的瞭解。

設計模式持續更新中...

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