說起介面卡模式,相信很多做android的同學第一印象就是adapterview的adapter,那它是幹嘛用的呢?為什麼要叫adapter呢?要了解這個問題,我們首先來看看介面卡模式的定義:
將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。——gang of four恩,看起來好像有點迷糊,舉個例子吧:
我電腦的電源是三個插頭(也就是有地線)的那種,不知道為啥學校的插座都是兩個插孔的,哎呀,這可咋辦啊!同學建議我們買個轉換器,這種轉換器有三個插孔,我的電源可以插進去,同時它還有兩個插頭,可以插進學校的插座裡,嘿嘿,同學真聰明,這麼容易的就解決了我的問題。在上面的例子裡,那個轉換器也可以叫做介面卡,我們現在要說的介面卡模式靈感就是來自上述所述的實際生活中遇到的問題。那在我們程式設計中會遇到什麼樣的問題呢? 再來看個例子:
好了,通過上面的三個小段子,相信大家對介面卡模式應該了有了大概的認識,下面還是用一張結構圖來清晰的描述一下什麼是介面卡模式吧。
通過上面的圖我們也可以看出來,介面卡要做的事情就是讓我們寫的野實現適配到系統需要的標準實現上。下面我們迅速進去**模式,讓**告訴我們介面卡模式張啥樣!
package player
type player inte***ce
package player
import
"fmt"
type musicplayer struct
func (p musicplayer) playmusic()
package main
import . "./player"
func main()
play(player)
}func play(player player)
**也超級簡單,乙個play
方法去呼叫了player
的實現的playmusic
方法。來看看結果,
gamesoundplayer
也是有乙個src
屬性,也有乙個方法,不過這個方法叫playsound
,並不是我們需要的playmusic
,那可咋辦呢?別忘了咱們的play
方法
需要的是乙個player
的實現,並自動呼叫了playmusic
方法,下面本節的主角-gamesoundadapter
出場。
package player
type gamesoundadapter struct
func (p gamesoundadapter) playmusic()
package main
import . "./player"
func main()
gameadapter := gamesoundadapter
play(gameadapter)
}func play(player player)
看main函式中,首先我們還是有乙個gamesoundplayer
型別的變數,然後將它賦值給了gamesoundadapter
的soundplayer
屬性,下面呼叫gamesoundadapter
的playmusic
方法,就可以間接的呼叫gamesoundplayer
的playsound
方法了,這樣我們就輕鬆的將gamesoundplayer
適配到了player
。
來看看結果:
整體來看我們的**還是很簡單,不過簡單的**已經將介面卡模式講解的很清楚了,那最後我們來思考乙個問題,介面卡模式體現了哪些物件導向的設計原則呢?針對介面程式設計有木有?開閉原則有木有?
設計模式 介面卡模式 Go語言描寫敘述
說起介面卡模式,相信非常多做android的同學第一印象就是adapterview的adapter,那它是幹嘛用的呢?為什麼要叫adapter呢?要了解這個問題。我們首先來看看介面卡模式的定義 將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類能夠一起...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...