適配器模式-golang

此篇中,主要練習的是適配器模式。具體可以看(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)

   }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章