設計模式總結-適配器模式

什麼是適配器模式

適配器模式(Adapter Pattern)是指將一個類的接口轉換成客戶指望的另外一個接口,使本來的接口不兼容的類能夠一塊兒工做,屬於結構型設計模式。
適配器模式主要有3個角色:
被適配者(Adaptee):適配者即被適配的角色
好比買了一個歐標吹風機,和國內的標準並不匹配。這時,被適配的角色即爲國內的插座
適配器(Adapter):適配器能夠調用適配者轉換爲目標接口,即做爲一個轉換器,將一個不可以使用的接口轉換爲可用的接口
果斷的上了某東買了個接口轉換器
目標角色(Target):目標角色即爲適配器要轉換成的目標接口
轉換器提供的歐標插孔就是這裏咱們所說的目標角色或者目標接口設計模式

適配器模式的優勢

  1. 將被適配者和目標角色解耦,引入適配器類,不改動原有代碼
  2. 提升類的複用程度
  3. 靈活性更好

案例的簡單實現

以上文中的歐標插頭爲例
一、被適配者socket

/**
 * Description :   .
 *
 * @author : laoyeye.net
 * @date : Created in 2020/7/25 20:56
 */
public interface ChinaSocket {

    void socketByChina();
}

二、被適配者實現ide

/**
 * Description :   .
 *
 * @author : laoyeye.net
 * @date : Created in 2020/7/25 21:08
 */
public class ChinaSocketImpl implements ChinaSocket {

    @Override
    public void socketByChina() {
        System.out.println("插入國標電源");
    }
}

三、目標接口,歐標電源接口this

/**
 * Description :   .
 *
 * @author : laoyeye.net
 * @date : Created in 2020/7/25 20:56
 */
public interface EuropeSocket {

    void socketByEurope();

}

四、適配器,國標轉歐標.net

/**
 * Description :   .
 *
 * @author : laoyeye.net
 * @date : Created in 2020/7/25 21:00
 */
public class ChinaToEuAdapter implements EuropeSocket {

    /**
     * 須要適配的接口
     */
    private ChinaSocket chinaSocket;

    public ChinaToEuAdapter(ChinaSocket chinaSocke) {
        this.chinaSocket = chinaSocke;
    }

    @Override
    public void socketByEurope() {
        System.out.println("適配器,國標轉爲歐標");
        chinaSocket.socketByChina();
    }
}

五、運行實現設計

/**
 * Description :   .
 *
 * @author : zhangzhuo
 * @date : Created in 2020/7/25 21:03
 */
public class HairDryer {

    /**
     * 指望的三項供電接口
     */
    private EuropeSocket europeSocket;

    public HairDryer(EuropeSocket europeSocket) {
        this.europeSocket = europeSocket;
    }

    public void work() {
        europeSocket.socketByEurope();
        System.out.println("開始吹頭髮了");
    }

    public static void main(String[] args) {
        // 國標插座
        ChinaSocket chinaSocket = new ChinaSocketImpl();
        //適配器轉換
        ChinaToEuAdapter chinaToEuAdapter = new ChinaToEuAdapter(chinaSocket);
        HairDryer hairDryer = new HairDryer(chinaToEuAdapter);
        // 工做
        hairDryer.work();
    }

}

效果:code

適配器,國標轉爲歐標
插入國標電源
開始吹頭髮了

哇哦,接口成功實現轉換,吹風機終於用起來了。對象

總結

適配器模式我目前工做中其實不多用到,過多的適配器也不利於系統的維護接口

  1. 適配器適合已經存在的類,它的方法和需求不匹配(方法結果相同或類似)的狀況。
  2. 適配器模式不是軟件設計階段考慮的設計模式,是隨着軟件維護,因爲不一樣產品、不一樣廠家形成功能相似而接口不相同狀況下的解決方案。

最後,你們有沒有感受上面那個案例,其實咱們上次講過的裝飾者模式也能夠實現呢。的確,這兩種模式均可以實現相似的效果,但卻又有所不一樣,好比:
裝飾者模式適合在不改變原有對象的基礎上,將功能附加在對象上,用於擴展一個類的功能。而本文所講的適配器模式主要適合在不改變原有接口的前提下,解決接口不兼容的問題。總得來講二者的主要區別就在於一個是裝飾,一個是來解決接口不兼容的問題,記住這兩點,相信在使用上就不會有疑問了ip

相關文章
相關標籤/搜索