博客
关于我
设计模式这样玩泰简单(Golang版)-单例模式
阅读量:142 次
发布时间:2019-02-28

本文共 1007 字,大约阅读时间需要 3 分钟。

场景

老板:“现在咱们要搞个单例,整个系统跑起来就只能有一个对象,实现吧?” 你:“好的老板,那就使用单例模式。”

方案

我们使用单例设计模式可以解决这个问题。单例指的就是在某个类的内部维护自己一个对象实例,并只能通过单一接口暴露出去。一般我们实现单例可以用饿汉模式和懒汉模式。两种模式的区别在于实现时是否提前创建对象实例。

饿汉模式是最简单的实现方式,直接在类初始化时创建对象实例,并将其存储起来等待使用。懒汉模式则稍微复杂一些,会在第一次需要使用对象实例时创建实例。两种方式都能实现单例的功能,但懒汉模式在某些高并发场景下需要额外的锁机制来保证线程安全。

单例模式的主要应用场景是需要全局唯一对象的场合。比如手机应用程序的主进程,或者Java Spring中的Bean容器。这些场景都需要确保系统运行中只有一个对象实例。

实现

代码示例如下:
package mainimport (	"fmt"	"sync")type Singleton struct {	Name string}var singletonHungry = &Singleton{	Name: "singletonHungry",}var singletonLazy *Singletonvar once sync.Oncefunc GetSingletonHungry() *Singleton {	return singletonHungry}func GetSingletonLazy() *Singleton {	if singletonLazy == nil {		once.Do(func() {			singletonLazy = &Singleton{				Name: "singletonLazy",			}		})	}	return singletonLazy}func main() {	fmt.Println("设计一个单例模式")	fmt.Println("好的老板")	fmt.Println(GetSingletonHungry().Name)	fmt.Println(GetSingletonLazy().Name)}

这个代码实现了懒汉模式和饿汉模式两种单例实现方式。懒汉模式通过sync.Once保证了线程安全,而饿汉模式则直接在类初始化时创建对象实例。无论是哪种模式,都确保了系统中只有一个对象实例。

转载地址:http://cpod.baihongyu.com/

你可能感兴趣的文章
Python 中多线程与多处理之间的区别
查看>>
Python 中如何使用 lambda 函数
查看>>
Python 中如何创建多行字符串?
查看>>
Python 中如何处理异常?
查看>>
Python 中如何实现列表的切片?
查看>>
Python 中如何实现字典的排序?
查看>>
Python 中常用的数据类型及相关操作详解
查看>>
python 中文乱码
查看>>
Python 中生成器与普通函数的区别
查看>>
Python 中的 *tuple 和 **dict 是什么意思?
查看>>
Python 中的 filter() 函数:筛选可迭代对象元素
查看>>
Python 中的 Pillow 不允许我打开图像(“超出限制“)
查看>>
Python 中的 threading 模块和 multiprocessing 模块有何区别?
查看>>
Python 中的 threading 模块和 multiprocessing 模块有何区别?
查看>>
Python 中的 Turtle 库详解
查看>>
Python 中的 __slots__ 属性有什么作用?
查看>>
Python 中的... 三点、箭头(->)、/ 分别的作用
查看>>
python读取json数据的id_python处理JSON数据
查看>>
Python 中的Duck Typing
查看>>
Python 中的for in 遍历生成字典、添加判断条件if
查看>>