1. 介绍

单例模式指只能被实例化一次

特点:

a) 类构造器私有

b) 持有自己类型的属性

c) 对外提供获取实例的静态方法

在实现上有懒汉方式,饿汉方式,懒汉加锁,双重锁,sync.Once实现等不同的实现方法。


2. 代码示例

a) 懒汉方式

缺点:非线程安全。当正在创建时,有线程来访问此时ins = nil就会再创建,单例类就会有多个实例了。


b) 饿汉方式

缺点:如果singleton创建初始化比较复杂耗时时,加载时间会延长。


c) 懒汉加锁

缺点:虽然解决并发的问题,但每次加锁是要付出代价的


d) 双重锁


e) sync.Once实现

推荐采用此方法。

sync.Once是golang提供的方法,一旦执行一次,就不再执行。