相似單例模式,享元模式也是經過共享對象來提升性能。區別在於:數據庫
- 單例模式只保存一個對象的實例,例如客戶端的數據庫鏈接對象。
- 享元模式保存一類對象的實例,例如服務端的線程池、鏈接池等。
Golang 示例
package main import ( "fmt" ) type Connect struct { name string } func NewConnect(name string) *Connect { return &Connect{name} } type ConnectFactory struct { pool map[string]*Connect } func NewConnectFactory() *ConnectFactory { return &ConnectFactory{pool:map[string]*Connect{}} } func (cf *ConnectFactory) GetConnect(key string) *Connect { if _, ok := cf.pool[key]; !ok { // ... connect c := NewConnect(key) fmt.Println("NewConnect success") cf.pool[key] = c } return cf.pool[key] } func main() { cf := NewConnectFactory() c1 := cf.GetConnect("con1") fmt.Println(c1.name) c1 = cf.GetConnect("con1") fmt.Println(c1.name) c2 := cf.GetConnect("con2") fmt.Println(c2.name) }