
单例模式(Singleton Pattern)
定义
一个类只允许创建一个对象,那这个类就是一个单例类,这种模式就叫做单例模式
应用场景
有些数据在系统中只应该保存一份,比较适合使用单例设计模式
常见形式
- 饿汉式
- 懒汉式
- 双重检测
- 静态内部类
- 枚举形式
唯一性
- 进程内唯一,常见的单例形式
- 线程内唯一,通过ThreadLocal或者线程id等实现
- 分布式唯一,通过分布式锁等保证唯一性
Go源码实现
懒汉式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| type Singleton struct { }
var instance *Singleton
func init() { instance = &Singleton{} }
func GetInstance() *Singleton { return instance }
|
懒汉式
1 2 3 4 5 6 7 8 9 10 11 12 13
| import "sync"
var lazysingleton *Singleton var once sync.Once
func GetLazySingleton() *Singleton { if lazysingleton == nil { once.Do(func() { lazysingleton = &Singleton{} }) } return lazysingleton }
|