文章首發:
結構型模式:適配器模式java
七大結構型模式之一:適配器模式。設計模式
姓名 :適配器模式微信
英文名 :Adapter Pattern架構
價值觀 :老媒人,牽線搭橋機器學習
我的介紹 :
Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
將一個類的接口變換成客戶端所期待的另外一種接口,從而使本來因接口不匹配而沒法在一塊兒工做的兩個類可以在一塊兒工做。
(來自《設計模式之禪》)ide
你們有買過港式的 Apple 產品麼?在深圳的同窗估計買過,畢竟港式的 Apple 產品基本比國內便宜 500 以上。我手機和平板都是在香港買的,買來後這充電器是無法直接充電的,由於港版的電子產品都是英式的插頭,而我們國內是中式的,因此用上港版電子產品的同窗免不了要用上這麼一個轉換器:將英式的插孔轉爲中式的插孔,方可插入咱家裏的插座充電。這個轉換器就是今天想講的適配器。學習
沒見過的同窗能夠看看圖片熟悉一下,下圖右邊爲港版蘋果手機充電器,插頭比較大,左邊爲某品牌轉換器,插頭爲中國家用標準形狀。
this
下圖爲使用時的圖片
設計
在這描述一下這個場景。用港式插頭要在國內充電,由於插頭和插座大小對不上,因此須要加一個適配器,這個適配器充當插頭和插座,它的插頭能夠插入國內標準的插座,它的插座能夠插入港式標準的插頭,這樣子就能夠用港式充電器在國內爲手機充電。code
下面用適配器模式代碼實現這個場景。
首先須要找到被適配的對象是什麼?在這裏咱們的被適配對象是英式充電器。
/** * 英式充電器 */ class BritishCharger { public void chargeByBritishStandard(){ System.out.println("用英式充電器充電"); } }
在這個場景的目的是什麼?在中國爲港式手機充電,所以目的是讓英式充電器可以在中國標準的插座充電。
/** * 使用中式插座充電 */ interface Target { void chargeByChineseStandard(); }
接下來是這個設計模式的主角:適配器。它須要鏈接中式插座以及英式充電器,在中間作適配功能。
/** * 充電器適配器 */ class ChargerAdapter implements Target { private BritishCharger britishCharger; public ChargerAdapter(BritishCharger britishCharger) { this.britishCharger = britishCharger; } @Override public void chargeByChineseStandard() { System.out.println("使用中英式插頭轉換器"); britishCharger.chargeByBritishStandard(); } }
上面是適配器模式的一個簡單的例子,要學習適配器模式也能夠看看 Java 的 IO 實現源碼,裏面是應用適配器模式的官方很好的代碼。
適配器很好的將 2 個沒法關聯的類結合起來,在中間起橋樑做用。另外新增適配器代碼不會影響原來被適配者的正常使用,他們能夠一塊兒被使用。在工做中和外部系統對接的時候,大可能外部系統的數據格式和本身系統的數據格式並不相同,這時候就能夠利用適配器模式來實現。
推薦閱讀
公衆號後臺回覆『大禮包』獲取 Java、Python、IOS 等教程
加我的微信備註『教程』獲取架構師、機器學習等教程