第一部分·创建型模式-01-单例模式(Singleton)

2023-10-29  本文已影响0人  玄德公笔记

1. 概述

指目标类(Class)只有一个实例对象(Object),并且向使用该对象的客户端提供访问单例的全局方法。

1.1 目的

1.2 实现方式

2. 代码示例

2.1 设计

以一个饿汉式模式为例

如果使用懒汉式模式,在main()函数调用CreateKing()函数即可

2.2 代码

package main

import (
    "fmt"
    "sync"
)

// 定义单例对象
type king struct {
    Name string
}

// 提供一个方法访问单例对象
func (k *king) Get() {
    fmt.Printf("%s is king\n", k.Name)
}

var (
    //保证后边创建函数只能执行一次
    once sync.Once
    //声明单一个变量类型是单例对象
    ourKing *king
)

func init() {
    //懒汉模式,启动时创建一个实例
    CreateKing("汉献帝")
}

// 定义一个创建单例对象的函数
func CreateKing(name string) (k *king) {
    once.Do(func() {
        ourKing = &king{
            Name: name,
        }
    })
    return ourKing
}
func main() {
    //查看该启动时实例化的单例
    ourKing.Get()
    //再次实例化,并且访问它,结果我们可以看见,没有创建新实例
    CreateKing("曹贼").Get()
}
献帝 is king
献帝 is king

可见SetKing第二次并没有实现。


上一篇下一篇

猜你喜欢

热点阅读