04、 Golang 设计模式:04_单例模式

1、介绍

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式(Singleton)的目的是为了保证在一个进程中,某个类有且仅有一个实例。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

 

2、示例

示例代码:

package main

import (
	"fmt"
	"sync"
)

type SingleData struct {
	data interface{}
}

var data *SingleData
var once sync.Once //通过该类型可以实现单例模式,虽然是多次赋值,但是只执行一次(一个对象多次实例化,但是只有一个,共享对象地址)

func getInstance(i int) *SingleData {
	once.Do(func() {
		data = &SingleData{i}
	})
	return data
}
func main() {
	i1 := getInstance(1)
	i2 := getInstance(2)
	if i1 == i2 {
		fmt.Println("单例模式")

	} else {
		fmt.Println("不是单例模式")
	}
}

UML图: