此篇中,主要练习的是适配器模式。具体可以看(http://www.runoob.com/design-pattern/adapter-pattern.html)
package main import ( "fmt" "strings" ) func main() { play := AudioPlayer{} play.play("mp4","老人与海.mp4") } type MediaPlayer interface{ play(audioType string,audioName string) } type AdvancedMediaPlayer interface { playVlc(audioName string) playMp4(audioName string) } type Vlc struct { } func (v Vlc) playVlc(audioName string) { fmt.Println("vlc play:",audioName) } func (v Vlc) playMp4(audioName string) { fmt.Println("vlc play:",audioName) } type Mp4 struct { } func (m Mp4) playVlc(audioName string) { fmt.Println("vlc play:",audioName) } func (m Mp4) playMp4(audioName string) { fmt.Println("mp4 play:",audioName) } type MediaAdapter struct { AdvancedMediaPlayer AdvancedMediaPlayer } func (ma *MediaAdapter) MediaAdapter(audioType string) { if strings.ToUpper(audioType) == "VLC"{ ma.AdvancedMediaPlayer = Vlc{} }else { ma.AdvancedMediaPlayer = Mp4{} } } func (ma *MediaAdapter) play(audioType string,audioName string) { if strings.ToUpper(audioType) == "VLC"{ ma.AdvancedMediaPlayer.playVlc(audioName) }else { ma.AdvancedMediaPlayer.playMp4(audioName) } } type AudioPlayer struct { MediaAdapter MediaAdapter } func (ap *AudioPlayer) play(audioType string,audioName string) { if strings.ToUpper(audioType) == "VLC" || strings.ToUpper(audioType) == "MP4"{ ap.MediaAdapter = MediaAdapter{} ap.MediaAdapter.MediaAdapter(audioType) ap.MediaAdapter.play(audioType,audioName) } }