单件模式 singleton
它是为了提供一个全局实例。比如数据库连接,如果每个用户和线程都独立申请,那么很快就会达到数据库连接的上限。不使用全局变量是因为:
部分语言没有全局变量;
全局变量一样无法阻止类多次实例化。
最终目的是确保只有一个全局实例的办法,比如通过约定俗成的Instance()获得该类实例,Instance()保证不会重复创建。又或者无法调用类的构造函数,而只能调用类的获取实例函数,这样就实现了无法创建新实例的目的。
---
目录结构
main.go
./singleton/singleton.go
singleton.go
package singleton import ( "fmt" ) var _self *Singleton type Singleton struct { Name string } func Instance() *Singleton { if _self == nil { _self = new(Singleton) return _self } return _self } func (o *Singleton) SetName(s string) { _self.Name = s } func (o *Singleton) GetName() { fmt.Println("Name:", _self.Name) }
main.go
package main import ( "./singleton" ) func main() { a := singleton.Instance() b := singleton.Instance() a.SetName("funny") b.SetName("Test") a.GetName() return }
结果: Name: Test
有疑问加站长微信联系(非本文作者)