Java中除去有設計原則之外,還有23中設計模式。
這些模式都是前輩們一點一點積累下來,一直在改進,一直在優化的,而這些設計模式可以解決一些特定的問題。
並且在這些模式中,可以說是將語言的使用體現的淋漓盡致。
那我們今天要學習 結構型模式 中的 適配器模式 !
適配器模式
直接百度百科走起
通過百科,我們知道了適配器模式也有時候叫做包裝樣式或者包裝,這個東西能幹啥,舉個栗子。
好比你現在去了國外,但是不會說外語,這時候你就得需要一個翻譯官,而這個翻譯官就是適配器。再有就是電腦充電,電腦充電是使用的直流電進行充電,但問題是你家裏進來的是交流電,這時候,你就得需要一個適配器,將這個交流電轉換成直流電,我們就將這個轉換的裝置叫做適配器。
說了生活中的例子之後,我們再來說一下軟件設計中適配器使用的場景。
就好比你開發組件,你現在項目中需要一個A組件,而你項目中已經有了B組件,但是這個B組件又有些問題,導致和現在的項目不能夠很好地兼容,如果再去從新開發這個B組件還得費時間,這時候,使用適配器模式,將A轉換成B,這樣,你的項目就可以很好地解決B組件不兼容的問題了。
模式的定義與特點
通過上面的瞭解,我們知道了適配器模式是什麼,能幹啥,這裏我們來看一下定義和特點。
定義:
將一個類的接口轉換成客戶希望的另外一個接口,使得原本由於接口不兼容而不能一起工作的那些類能一起工作。
說完定義,在說優缺點之前,我們還得說一個東西
適配器模式分爲類結構型模式和對象結構型模式兩種,前者類之間的耦合度比後者高,且要求程序員瞭解現有組件庫中的相關組件的內部結構,所以應用相對較少些。
優點:
1. 客戶可以通過適配器進行調用目標接口
2. 複用現在已經存在的接口或者類,這樣省的開發人員一次一次的開發了
3. 將目標類和適配者類解耦,解決了目標類和適配者類接口不一致的問題。
缺點:
對類適配器來說,更換適配器的實現過程比較複雜。
模式的結構與實現
雖然說這個適配器模式分爲兩個模式,但是,他們的這個模型結構是一樣的,下面我們給出
1. 目標接口(Target),這個就是當前客戶想要的接口
2. 適配者類(Adaptee),就是就是我們上面說的B這個組件,我們到時候就需要把這個B適配者通過適配器弄成A
3. 適配器類(Adapter),它是一個轉換器,通過繼承或引用適配者的對象,把適配者接口轉換成目標接口,讓客戶按目標接口的格式訪問適配者。
知道了之後,我們挨個進行實現,首先是類結構型模式
類結構型模式
我們先創建一個目標接口,起個名字叫做Target。然後我們弄一個方法,叫play方法,返回一個String類型的值
接着,我們再來弄一個適配者(也就是要被適配的對象,好比上文中說的B這個組件),我們起個名字叫Adaptee。
這裏呢,我們寫一個方法,叫玩籃球的方法,裏面輸出一句話,好好玩。
接着,我們再弄個適配器這個類。創建一個類叫Adapter,並且去實現Target。
當然,這裏不會說返回一個空,這裏我們開始對適配者這個類做處理
做完處理,我們再來弄一個測試類,AdapterTest。我們來實例化一下目標接口。(如果你不知道爲啥要實例化目標接口,說明你沒有好好看這篇文章。)
我們來運行一下,看看結果。
沒有毛病,沒玩成籃球,最後回去寫作業去了。以上就是類結構型模式,它這個就是相當於給之前的弄了一個封裝。
我們再來看對象結構型模式。
對象結構型模式
對象結構型模式,我們只需要修改一下上面的類結構型模式即可
打開Adapter這個適配器類
修改完成之後,我們再來修改一下測試類
好,運行一下
OK的,沒有問題,大家好好理解一下。