设计模式这样玩泰简单(Golang版)-单例模式

场景

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

方案

在这里插入图片描述
我们使用单例设计模式可以解决这个问题.单例指的就是在某个类的内部维护自己一个对象实例,并只能通过单一接口暴露出去.
一般我们实现单例可以用饿汉模式和懒汉模式.说白了就是先创建好对象等待着,还是等你要的时候我再给你创建.两个方式都可以实现,唯一的区别是在实现懒汉的时候要考虑并发性的问题.
单例的作用场景一般是用在全局只用一个对象的场合,比如我们手机打开一个APP,这个进程就是一个单例,下次点击图标打开其实是复用了上次的那个对象.还有,我们之前使用Java Spring容器的时候打开一个容器,一个容器也是一个单例

实现

see:https://github.com/jjtHappy/design-pattern-so-simple

package main

import (
	"fmt"
	"sync"
)

type Singleton struct {
	Name string
}

var singletonHungry = &Singleton{
	Name: "singletonHungry",
}
var singletonLazy *Singleton
var once sync.Once

func 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)
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值