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

你可能感兴趣的文章
PHP trim() 函数
查看>>
php unicode编码转成unioce字符(中文)
查看>>
php url路径问题和php文件以绝对路径引入
查看>>
PHP WebSehll 后门脚本与检测工具
查看>>
ReentrantLock源码解析
查看>>
PHP XSS攻击防范--如何过滤用户输入
查看>>
php zookeeper实现分布式锁
查看>>
PHP 中 this,self,parent 的区别、用法
查看>>
PHP 中如何高效地处理大规模数据的排序?
查看>>
PHP 之ftp客户端类封装实现
查看>>
php 代码改进
查看>>
php 代码混淆
查看>>
PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
查看>>
Redis系列之如何避免缓存击穿
查看>>
php 内存分析
查看>>
PHP 函数名前面加&
查看>>
redis报错
查看>>
php 删除包含某一字符的数组元素
查看>>
Redis学习总结(19)——Redis 5种集群方式对比
查看>>
php 反射
查看>>