白話講適配器模式

肥宅很喜歡聽音樂,有一天他在湖邊一邊聽音樂一邊踩單車,聽得正嗨,一不小心旁邊有個人穿過,肥宅一個剎車,結(jié)果自己用了多年的腎5掉進(jìn)湖里了。肥宅趕緊撈起自己的腎5,發(fā)現(xiàn)已經(jīng)用不了,肥宅這下心疼死了。
過了幾天,腎7出了,肥宅忍一忍,用自己存了很久的錢買了臺腎7。肥宅并沒了解過腎7有什么改變,結(jié)果想用自己以前的耳機(jī),發(fā)現(xiàn)居然腎7沒有耳機(jī)圓孔,這下怎么辦,怎么插下去。肥宅趕緊找手機(jī)店的老板,溝通一番,原來腎7沒有耳機(jī)孔了,這下怎么辦,兩個口不匹配,這下怎么辦,原來蘋果出了一個轉(zhuǎn)換器,買一個轉(zhuǎn)換器就可以聽歌了,肥宅無奈之下,又花錢買了一個轉(zhuǎn)換器。

沒有耳機(jī)圓孔的iphone7

只能插入到圓孔的耳機(jī)

有線耳機(jī)聽歌需要經(jīng)過lightning口

新出的適配器

好了,講了一長段故事,其實重點講的就是適配器模式。當(dāng)接口不匹配的時候怎么辦,耳機(jī)口和lightning口不匹配,于是適配器出現(xiàn)了,可以插入lightning口,又有耳機(jī)插入的圓孔(實現(xiàn)了舊接口,又組合了新接口),適配器模式講的就是這個意思。下面看看代碼。


public class IPhone7 {
    //iphone7有l(wèi)ightning口,沒有聽歌用的圓孔
    public Lightning lightning;
    public void setLightning(Lightning lightning)
    {
        this.lightning=lightning;
    }
    //聽歌只能用lightning口
    public void listenMusic()
    {
        lightning.listenMusic();
    }
}
//要聽歌除了無線必需要必須用lightning
public interface Lightning {
    void listenMusic();
}
//耳機(jī)圓孔
public interface Circle {
    void listenMusic();
}
//耳機(jī)插入到圓孔就能聽歌
public class Earphone implements Circle{

    @Override
    public void listenMusic() {
        // TODO 自動生成的方法存根
        System.out.println("肥宅用圓孔耳機(jī)聽歌");
    }

}
//適配器實現(xiàn)了lightning口,可以插入到lightning口
public class Adapter implements Lightning{
    //同時有耳機(jī)圓孔
    public Circle circle;
    public Adapter(Circle circle)
    {
        this.circle=circle;
    }
    @Override
    public void listenMusic() {
        // TODO 自動生成的方法存根
        circle.listenMusic();
    }
    
}
public class 肥宅 {
    public static void main(String[] args) {
        //買了一個一臺iphone7
        IPhone7 iphone=new IPhone7();
        //有一個插入到圓孔就可以聽歌的舊耳機(jī)
        Circle circle=new Earphone();
        //買一個適配器,適配器上插上耳機(jī)
        Adapter adpter=new Adapter(circle);
        //在lightning口上插上買的適配器
        iphone.setLightning(adpter);
        //通過適配器實現(xiàn)了用lightning口聽歌
        iphone.listenMusic();
    }
}

那么問題來了

適配器模式有點亡羊補牢的意思?

是的,我們一般不會刻意去使用適配器模式,適配器模式一般不會出現(xiàn)在設(shè)計階段。

有沒有在設(shè)計的時候就用適配器模式?

有的,當(dāng)項目使用第三方接口的時候,我們沒有必要根據(jù)他的接口去改變我們自己的接口,應(yīng)用適配器就可以。

設(shè)計模式好像很少用到?

不要為了使用而使用,這樣反而會過度設(shè)計,看哪種模式能幫助我們就行了,所以先了解設(shè)計模式,用到的時候才不會方恨少。

[這是我在博客園上的博客]http://www.cnblogs.com/-new/)

我覺得分享是一種精神,分享是我的樂趣所在,不是說我覺得我講得一定是對的,我講得可能很多是不對的,但是我希望我講的東西是我人生的體驗和思考,是給很多人反思,也許給你一秒鐘、半秒鐘,哪怕說一句話有點道理,引發(fā)自己內(nèi)心的感觸,這就是我最大的價值。(這是我喜歡的一句話,也是我寫博客的初衷)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容