适配器模式

2020-05-11  本文已影响0人  耗子_aca3
package pattern

import (
    "fmt"
    "testing"
)

func TestAdapter(t *testing.T) {
    var play Play = AdapterCreator("gameSound", "xxxxxx", "lalalala")
    play.PlayMusic()

    play = AdapterCreator("music", "yyyyyyyyyy")
    play.PlayMusic()
}

type Play interface {
    PlayMusic()
}

// 第一个struct,直接实现PlayMusic方法
type MusicPlayer struct {
    Src string
}

func (m * MusicPlayer) PlayMusic()  {
    fmt.Printf("play a music, src is: %s\n", m.Src)
}

// 第二个struct,转一手先
type GameSound struct {
    Url string
    SoundName string
}

func (g *GameSound) PlaySound()  {
    fmt.Printf("play a game sound, url is: %s, sound name is: %s\n", g.Url, g.SoundName)
}

// adapter
type GameSoundAdapter struct {
    GameSound GameSound
}

func (g GameSoundAdapter) PlayMusic()  {
    g.GameSound.PlaySound()
}
// adapter

func AdapterCreator(adapterType string, data ...string) Play {

    switch adapterType {
        case "music":
            var musicPlayer Play = &MusicPlayer{Src: data[0]}
            return musicPlayer
        case "gameSound":
            var gameSound GameSound = GameSound{Url: data[0], SoundName: data[1]}
            var gameSoundAdapter Play = &GameSoundAdapter{GameSound: gameSound}
            return gameSoundAdapter
        default:
            return nil
    }
}
上一篇 下一篇

猜你喜欢

热点阅读