文章目录
- 系列文章目录
- 前言
- 一、单例模式
- 懒汉模式
- 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/case""fmt"
)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 "sync"var 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 "sync"var onceConf *Config
var once sync.Oncefunc GetOnceConf() *Config {once.Do(func() {onceConf = &Config{name: "once config",}})return onceConf
}