博客
关于我
设计模式这样玩泰简单(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/

你可能感兴趣的文章
numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
查看>>
numpy 数组与矩阵的乘法理解
查看>>
NumPy 数组拼接方法-ChatGPT4o作答
查看>>
numpy 用法
查看>>
Numpy 科学计算库详解
查看>>
Numpy.fft.fft和numpy.fft.fftfreq有什么不同
查看>>
Numpy.ndarray对象不可调用
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
numpy数组替换其中的值(如1替换为255)
查看>>
numpy数组索引-ChatGPT4o作答
查看>>
numpy转PIL 报错TypeError: Cannot handle this data type
查看>>
NutzCodeInsight 2.0.7 发布,为 nutz-sqltpl 提供友好的 ide 支持
查看>>
NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
查看>>
NVelocity标签使用详解
查看>>
nvidia-htop 使用教程
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>
OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
查看>>
OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
查看>>
OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
查看>>
OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
查看>>