0
点赞
收藏
分享

微信扫一扫

GoLang设计模式之单例模式

陆佃 2022-04-01 阅读 85

文章目录

GoLang设计模式之单例模式

注:本文基于Go SDK v1.8进行讲解

1.单例模式概念

在这里插入图片描述

2.单例模式优点

3.单例模式应用实例

4.单例模式使用场景

5.单例模式实现方式

6.懒汉模式

6.1概念

6.2不加锁实现

package one

type singleton struct {

}

var  instance *singleton
func GetInstance() *singleton {
 if instance == nil{
  instance = new(singleton)
 }
 return instance
}

6.3整个方法加锁

type singleton struct {

}

var instance *singleton
var lock sync.Mutex

func GetInstance() *singleton {
 lock.Lock()
 defer lock.Unlock()
 if instance == nil{
  instance = new(singleton)
 }
 return instance
}

6.4创建方法时进行锁定

type singleton struct {

}

var instance *singleton
var lock sync.Mutex

func GetInstance() *singleton {
 if instance == nil{
  lock.Lock()
  instance = new(singleton)
  lock.Unlock()
 }
 return instance
}

6.5双重检锁

type singleton struct {
 
}

var instance *singleton
var lock sync.Mutex

func GetInstance() *singleton {
 if instance == nil{
  lock.Lock()
  if instance == nil{
   instance = new(singleton)
  }
  lock.Unlock()
 }
 return instance
}

6.6原子操作实现

type singleton struct {
 
}

var instance *singleton
var once sync.Once
func GetInstance() *singleton {
 once.Do(func() {
  instance = new(singleton)
 })
 return instance
}

7.饿汉模式

7.1概念

7.2全局变量实现、init加载实现

type singleton struct {

}

var instance = new(singleton)

func GetInstance()  *singleton{
 return instance
}
type singleton struct {

}

var instance *singleton

func init()  {
 instance = new(singleton)
}

func GetInstance()  *singleton{
 return instance
}
举报

相关推荐

0 条评论