共计 856 个字符,预计需要花费 3 分钟才能阅读完成。
场景
代码层面的单进单出
- 比如我要指定一个短信供应商,并且整个程序都使用该供应商
- 比如我要指定一个缓存适配器,并且整个程序都使用该适配器
- 比如原来已经有写一个短信供应商,我需要进行重写,又不想修改原来的代码
下面我们以短信为例
根目录下 main.go 文件(位置1)
package main
import (
"fmt"
"test/aliSms"
"test/sms"
"test/tencentSms"
)
func main() {
sms.SetAdapter(&aliSms.Adapter{})
fmt.Printf("output: %s \n", sms.GetAdapter().SendSms())
sms.SetAdapter(&tencentSms.Adapter{})
fmt.Printf("output: %s \n", sms.GetAdapter().SendSms())
}
sms目录下 main.go 文件 (位置2)
package sms
type ISmsAdapter interface {
SendSms() string
}
var adapter ISmsAdapter
func GetAdapter() ISmsAdapter {
if adapter == nil {
panic("adapter is nil")
}
return adapter
}
func SetAdapter(in ISmsAdapter) {
adapter = in
}
aliSms 目录下 main.go 文件 (位置3)
package aliSms
// Adapter 阿里云供应商
type Adapter struct{}
func (adapter *Adapter) SendSms() string {
return "使用阿里云发送短信"
}
tencentSms 目录下 main.go 文件 (位置4)
package tencentSms
// Adapter 腾讯云供应商
type Adapter struct{}
func (adapter *Adapter) SendSms() string {
return "使用腾讯云发送短信"
}
完整代码文件
正文完