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

你可能感兴趣的文章
Prometheus监控k8s集群使用邮箱和微信告警!
查看>>
Prometheus监控mysq数据库实战
查看>>
prometheus监控nginx实战
查看>>
Prometheus监控redis数据库实战
查看>>
Prometheus监控教程:使用Grafana展示主机基本信息
查看>>
pytorch中如何使用预训练词向量
查看>>
Prometheus监控教程:使用PromQL查询监控数据(上篇)
查看>>
Prometheus监控教程:使用PromQL查询监控数据(下篇)
查看>>
Pytorch中关于forward函数的理解与用法
查看>>
Prometheus监控教程:安装部署
查看>>
Prometheus监控教程:配置介绍
查看>>
Pytorch中tqdm进度条的使用
查看>>
Prometheus(2):SpringBoot 2.X集成Prometheus
查看>>
Promise 原理解析与实现(遵循Promise/A+规范)
查看>>