介面卡適合用於解決新舊系統(或新舊介面)之間的相容問題,而不建議在一開始就直接使用
意圖:
介面卡模式將一個類的介面,轉換成客戶期望的另一個介面。介面卡讓原本介面不相容的類可以合作無間
關鍵程式碼:
介面卡中持有舊介面物件,並實現新介面
Go實現介面卡模式
package adaptor
import "fmt"
// 我們的介面(新介面)——音樂播放
type MusicPlayer interface {
play(fileType string, fileName string)
}
// 在網上找的已實現好的庫 音樂播放
// ( 舊介面)
type ExistPlayer struct {
}
func (*ExistPlayer) playMp3(fileName string) {
fmt.Println("play mp3 :", fileName)
}
func (*ExistPlayer) playWma(fileName string) {
fmt.Println("play wma :", fileName)
}
// 介面卡
type PlayerAdaptor struct {
// 持有一箇舊介面
existPlayer ExistPlayer
}
// 實現新介面
func (player *PlayerAdaptor) play(fileType string, fileName string) {
switch fileType {
case "mp3":
player.existPlayer.playMp3(fileName)
case "wma":
player.existPlayer.playWma(fileName)
default:
fmt.Println("暫時不支援此型別檔案播放")
}
}
測試用例
package adaptor
import "testing"
func TestAdaptor(t *testing.T) {
player := PlayerAdaptor{}
player.play("mp3", "死了都要愛")
player.play("wma", "滴滴")
player.play("mp4", "復仇者聯盟")
}
具體程式碼
更詳細的程式碼可參考:https://github.com/pibigstar/go-demo 裡面包含了 Go 常用的設計模式、Go 面試易錯點、簡單的小專案(區塊鏈,爬蟲等)、還有各種第三方的對接(redis、sms、nsq、elsticsearch、alipay、oss...),如果對你有所幫助,請給個 Star
,你的支援,是我最大的動力!
本作品採用《CC 協議》,轉載必須註明作者和本文連結