简介
运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。
享元模式中的角色和职责
Singleton
代码
package main
import (
"fmt"
"sync"
)
var once sync.Once
type singelton struct {}
var instance *singelton
func GetInstance() *singelton {
once.Do(func(){
instance = new(singelton)
})
return instance
}
func (s *singelton) SomeThing() {
fmt.Println("单例对象的某方法")
}
func main() {
s := GetInstance()
s.SomeThing()
}
总结
优点
- 单例模式提供了对唯一实例的受控访问。
- 节约系统资源。由于在系统内存中只存在一个对象
缺点
- 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。
- 读取享元模式的外部状态会使得运行时间稍微变长
适用场景
- 一个系统中有大量相同或者相似的对象,使用这些对象,会造成内存的大量消耗,这时候可以考虑使用享元模式