网站备案系统登陆不上,网站开发环境是什么,网站内怎么做链接,wordpress制作在线云课堂文章目录 1. 概述1.1 目的1.2 实现方式 2. 代码示例2.1 设计2.2 代码 1. 概述
1.1 目的
保证类只有一个实例有方法能让外部访问到该实例
1.2 实现方式 懒汉式 在第一次调用单例对象时创建该对象#xff0c;这样可以避免不必要的资源浪费 饿汉式 在程序启动时就创建单例对象… 文章目录 1. 概述1.1 目的1.2 实现方式 2. 代码示例2.1 设计2.2 代码 1. 概述
1.1 目的
保证类只有一个实例有方法能让外部访问到该实例
1.2 实现方式 懒汉式 在第一次调用单例对象时创建该对象这样可以避免不必要的资源浪费 饿汉式 在程序启动时就创建单例对象这样可以提高程序的运行效率 双重检查锁 通过加锁来保证同一时刻只有一个线程可以创建单例对象
2. 代码示例
2.1 设计 以一个饿汉式模式为例 定义一个单例对象king 它的Get()方法为外部提供访问 声明一个变量ourKing它的类型是单例对象king定义一个函数CreateKing()用来实例化ourKing定义初始化函数调用函数CreateKing() 实例化ourKing调用 使用ourKing的Get()方法访问单例对象再次调用CreateKing() 实例化ourKing并访问单例对象 结果没有变化说明第二次实例化没有执行 如果使用懒汉式模式在main()函数调用CreateKing()函数即可 2.2 代码
han包
package mainimport (fmtsync
)// 定义单例对象
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第二次并没有实现。