Famousmai's blog Famousmai's blog
首页
👍 网站介绍
💯 编程分享
✍️ 生活感悟
🎮 游戏人生
📈 网站动态
💌 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Famous Mai

爱玩辅助的后端小哥
首页
👍 网站介绍
💯 编程分享
✍️ 生活感悟
🎮 游戏人生
📈 网站动态
💌 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 算法

  • 学习笔记

  • 踩坑记录

  • 面试分享

  • 技术方案文章梳理

  • 设计模式

    • 设计模式介绍
    • 单例模式
      • 代码实现
    • 策略模式
  • 编程分享
  • 设计模式
famousmai
2023-03-05
目录

单例模式

# 代码实现

package main

import (
	"fmt"
	"sync"
)

var once sync.Once
var lock = &sync.Mutex{}

type single struct {
}

var singleInstance *single
var singleInstance2 *single

func getInstance() *single {
	if singleInstance == nil {
		lock.Lock()
		defer lock.Unlock()
		if singleInstance == nil {
			fmt.Println("Creating single instance now")
			singleInstance = &single{}
		} else {
			fmt.Println("Single instance already created.")
		}
	} else {
		fmt.Println("Single instance already created.")
	}

	return singleInstance
}

// 利用 once.do 实现
func getInstanceBySyncOnce() *single {
	if singleInstance2 == nil {
		once.Do(func() {
			fmt.Println("Creating single instance2 now")
			singleInstance2 = &single{}
		})
	} else {
		fmt.Println("Single instance2 already created.")
	}

	return singleInstance2
}

func main() {
	getInstance()
	getInstance()
	getInstance()

	getInstanceBySyncOnce()
	getInstanceBySyncOnce()
	getInstanceBySyncOnce()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
编辑 (opens new window)
上次更新: 2023/03/13, 15:09:59
设计模式介绍
策略模式

← 设计模式介绍 策略模式→

最近更新
01
策略模式
03-13
02
设计模式介绍
03-05
03
04.排序
03-04
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式