Skip to content

简介

运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。

享元模式中的角色和职责

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()
}

总结

优点

  1. 单例模式提供了对唯一实例的受控访问。
  2. 节约系统资源。由于在系统内存中只存在一个对象

缺点

  1. 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。
  2. 读取享元模式的外部状态会使得运行时间稍微变长

适用场景

  1. 一个系统中有大量相同或者相似的对象,使用这些对象,会造成内存的大量消耗,这时候可以考虑使用享元模式