创建型-单例模式

单例模式

单例模式(Singleton Pattern)

定义

一个类只允许创建一个对象,那这个类就是一个单例类,这种模式就叫做单例模式

应用场景

有些数据在系统中只应该保存一份,比较适合使用单例设计模式

常见形式

  1. 饿汉式
  2. 懒汉式
  3. 双重检测
  4. 静态内部类
  5. 枚举形式

唯一性

  1. 进程内唯一,常见的单例形式
  2. 线程内唯一,通过ThreadLocal或者线程id等实现
  3. 分布式唯一,通过分布式锁等保证唯一性

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
}