golang 适配器 单例模式

15次阅读
没有评论

共计 856 个字符,预计需要花费 3 分钟才能阅读完成。

场景

代码层面的单进单出

  • 比如我要指定一个短信供应商,并且整个程序都使用该供应商
  • 比如我要指定一个缓存适配器,并且整个程序都使用该适配器
  • 比如原来已经有写一个短信供应商,我需要进行重写,又不想修改原来的代码

下面我们以短信为例

golang 适配器 单例模式

根目录下 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 "使用腾讯云发送短信"
}

完整代码文件

完整示例

正文完
 0
Eric chan
版权声明:本站原创文章,由 Eric chan 于2024-08-29发表,共计856字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。