【设计模式】单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在 Golang 中实现单例模式可以使用 sync 包提供的 Once 和 Mutex 来实现。
下面是一个使用 Golang 实现单例模式的示例代码:
package main
import (
"fmt"
"sync"
)
type Singleton struct {
data string
}
var instance *Singleton
var once sync.Once
func GetInstance() *Singleton {
once.Do(func() {
instance = &Singleton{"Hello World!"}
})
return instance
}
func main() {
s1 := GetInstance()
s2 := GetInstance()
if s1 == s2 {
fmt.Println("Same instance")
} else {
fmt.Println("Different instance")
}
}
在上面的代码中,我们定义了一个 Singleton 结构体,该结构体包含一个 data 字段。我们还定义了一个全局变量 instance,用于存储 Singleton 的唯一实例。
在 GetInstance 函数中,我们使用 sync.Once 来保证 instance 只被初始化一次。sync.Once 会在第一次调用 Do 方法时执行指定的函数,后续调用将被忽略。因此,只要我们通过 GetInstance 方法获取 instance,就可以保证 Singleton 的唯一性。
最后,在 main 函数中,我们分别使用 GetInstance 方法获取 Singleton 实例,并比较它们的地址是否相同。如果相同,则说明它们是同一个实例;否则,它们是不同的实例。