凡科建站做的网站有什么短板,上海闵行做网站,上海专业微信网站建设,招远网站建设公司报价文章目录 系列文章目录前言一、单例模式懒汉模式case 包饿汉模式case 包懒汉模式枷锁case 包 系列文章目录
第一章 设计模式案例 (一) 第二章 设计模式案例 #xff08;二) 第三章 设计模式案例 #xff08;二) 文章目录 系列文章目录前言一、单例模式懒汉模式case 包饿汉模… 文章目录 系列文章目录前言一、单例模式懒汉模式case 包饿汉模式case 包懒汉模式枷锁case 包 系列文章目录
第一章 设计模式案例 (一) 第二章 设计模式案例 二) 第三章 设计模式案例 二) 文章目录 系列文章目录前言一、单例模式懒汉模式case 包饿汉模式case 包懒汉模式枷锁case 包 前言
上一篇文章介绍了常用的几种设计模式和常用场景便于对设计模式加深理解此文章主要讲解设计模式的案例。 一、单例模式
懒汉模式
case 包 代码如下示例 package _casetype Config struct {name string
}func (c *Config) GetName() string {return c.name
}
package _casevar lazyConf *Config// 懒汉式加载单例模式非线程安全
func GetLazyConfig() *Config {if lazyConf nil {lazyConf Config{name: lazy config,}}return lazyConf
}代码如下示例main
package mainimport (_case design-pattern/singleton/casefmt
)func main() {var conf *_case.Configconf _case.GetLazyConfig()fmt.Println(conf.GetName())conf _case.GetHungryConfig()fmt.Println(conf.GetName())conf _case.GetCheckLockerConf()fmt.Println(conf.GetName())conf _case.GetOnceConf()fmt.Println(conf.GetName())
}饿汉模式
case 包 代码如下示例 package _casevar hungryConf *Configfunc init() { //先初始化hungryConf Config{name: hungry config,}
}// 饿汉式 单例模式
func GetHungryConfig() *Config {return hungryConf
}懒汉模式枷锁
case 包 代码如下示例简单工厂 package _caseimport syncvar checkLockerConf *Config
var checkLocker sync.Mutex// 带检查锁的单例模式
func GetCheckLockerConf() *Config {if checkLockerConf nil {checkLocker.Lock()defer checkLocker.Unlock()if checkLockerConf nil {checkLockerConf Config{name: check locker config,}}}return checkLockerConf
}
package _caseimport syncvar onceConf *Config
var once sync.Oncefunc GetOnceConf() *Config {once.Do(func() {onceConf Config{name: once config,}})return onceConf
}