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 协议》,转载必须注明作者和本文链接
推荐文章: