Go 实现常用设计模式(四)适配器模式

适配器模式 (adaptor)

适配器适合用于解决新旧系统(或新旧接口)之间的兼容问题,而不建议在一开始就直接使用

意图:
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间

关键代码:
适配器中持有旧接口对象,并实现新接口

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!