adapter模式:適配老版本介面 和 第三方介面
場景介紹:首先舉乙個場景,這個場景其實還是挺常見的,因為你的系統不斷的在迭代,
(1) 假設,我們做了乙個第一版的系統,這個系統裡有乙個介面 和乙個實現類;
(2) 接著我們開始做第二版的系統,這個系統我們定義了乙個新的介面,和新的實現類;
(3) 但是我們同時希望能夠基於第二版的介面,或者說我們同時在第二版的系統中 也要使用第一版系統中定義的那個老介面和老實現類
先定義乙個老版本的介面oldinte***ce,老版本介面,在這個oldinte***ce裡面,給它乙個方法,我們叫做oldexecute();
然後是老版本的實現類:oldinte***ceimpl,重寫介面中的方法,oldexecute(),方法裡,我們就直接列印一行輸出就行了。老版本介面實現的功能邏輯
然後同樣,新版本介面newinte***ce,新版本介面的實現類newinte***ceimpl,介面中的方法newexecute(),實現類中的方法也同樣列印輸出一下:新版本介面實現的功能邏輯,
現在如果不用模式的話,我們寫了一套**,然後,這套**裡面,我們又要用新版本的介面,又要用老版本的介面,這個時候,我們的**看起來是什麼樣子的,如下:
先寫乙個main方法,然後
oldinte***ce oldobject = new oldinte***ceimpl();
newinte***ce newobject = new newinte***ceimpl();
oldobject.oldexecute();
newobject.newexecute();
這個**就寫完了,執行一下,輸出:
老版本介面實現的功能邏輯
新版本介面實現的功能邏輯
這裡說一下,如果不用任何設計模式,我們的問題在哪兒?問題其實很明顯,就是說,我們的新的**中,融合了新老兩套介面,這個是很麻煩的乙個事情;
首先,如果你這麼幹的話,就會導致**很噁心,因為面向的是規範和風格完全不同的兩套介面,然後你的理解和維護的成本就提高了。
其次,假如說,現在都不給你選擇使用老版本介面的機會,直接就是,強制性公司規範,要求按照新版本介面來走,你的老版本介面的實現類,就沒法用了啊?
難不成還要重新寫一套,還要基於新版本的介面重新寫一套?當然不可能了,所以要用介面卡模式。
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式 介面卡模式(類介面卡和物件介面卡)
如果去歐洲國家去旅遊的話,他們的插座如下圖最左邊,是歐洲標準。而我們使用的插頭如下圖最右邊的。因此我們的膝上型電腦,手機在當地不能直接充電。所以就需要乙個插座轉換器,轉換器第1面插入當地的插座,第2麵供我們充電,這樣使得我們的插頭在當地能使用。生活中這樣的例子很多,手機充電器 將220v轉換為5v的...
設計模式 介面卡
一 功能 將乙個類的介面轉換成客戶希望的另外乙個介面,解決兩個已有介面之間不匹配的問題。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。二 示例 1 class adapter namespace designpattern adapter class target cl...