场景
老板:现在咱们要搞个单例,整个系统跑起来就只能有一个对象,实现吧
你:好的老板,那就使用单例模式.
方案
我们使用单例设计模式可以解决这个问题.单例指的就是在某个类的内部维护自己一个对象实例,并只能通过单一接口暴露出去.
一般我们实现单例可以用饿汉模式和懒汉模式.说白了就是先创建好对象等待着,还是等你要的时候我再给你创建.两个方式都可以实现,唯一的区别是在实现懒汉的时候要考虑并发性的问题.
单例的作用场景一般是用在全局只用一个对象的场合,比如我们手机打开一个APP,这个进程就是一个单例,下次点击图标打开其实是复用了上次的那个对象.还有,我们之前使用Java Spring容器的时候打开一个容器,一个容器也是一个单例
实现
see:https://github.com/jjtHappy/design-pattern-so-simple
package main
import (
"fmt"
"sync"
)
type Singleton struct {
Name string
}
var singletonHungry = &Singleton{
Name: "singletonHungry",
}
var singletonLazy *Singleton
var once sync.Once
func GetSingletonHungry() *Singleton {
return singletonHungry
}
func GetSingletonLazy() *Singleton {
if singletonLazy == nil {
once.Do(func() {
singletonLazy = &Singleton{
Name: "singletonLazy",
}
})
}
return singletonLazy
}
func main() {
fmt.Println("设计一个单例模式")
fmt.Println("好的老板")
fmt.Println(GetSingletonHungry().Name)
fmt.Println(GetSingletonLazy().Name)
}