1. 同步获取实例的方法, 具体如何产生对象交给传入的函数
func SyncGetSingleton(f func() interface{}) func() interface{} {
var obj interface{}
mutex := new(sync.Mutex)
return func() interface{} {
if obj == nil {
mutex.Lock()
defer mutex.Unlock()
if obj == nil {
obj=f()
}
return obj
}
return obj
}
}
2. 产生对象的方法
可以理解为一个工厂方法
factory=func() interface{} {
//构造对象
obj:=new(Some)
return obj
}
3. 组合起来
//获取产生对象的方法
var syncGetObj=SyncGetSingleton(factory)
4. 使用
obj:=syncGetObj()
调用obj方法, 处理具体业务逻辑