1. 介绍
单例模式指只能被实例化一次
特点:
a) 类构造器私有
b) 持有自己类型的属性
c) 对外提供获取实例的静态方法
在实现上有懒汉方式,饿汉方式,懒汉加锁,双重锁,sync.Once实现等不同的实现方法。
2. 代码示例
a) 懒汉方式
缺点:非线程安全。当正在创建时,有线程来访问此时ins = nil就会再创建,单例类就会有多个实例了。
b) 饿汉方式
缺点:如果singleton创建初始化比较复杂耗时时,加载时间会延长。
c) 懒汉加锁
缺点:虽然解决并发的问题,但每次加锁是要付出代价的
d) 双重锁
e) sync.Once实现
推荐采用此方法。
sync.Once是golang提供的方法,一旦执行一次,就不再执行。