美文网首页
设计模式——单例模式

设计模式——单例模式

作者: DevilRoshan | 来源:发表于2020-11-05 23:05 被阅读0次

什么是单例模式?

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实现

var (
    p *Pet
    once sync.Once
)

func GetInstance() *Pet {
    return p
}

func init()  {
    once.Do(func() {
        p = &Pet{}
    })
}

type Pet struct {
    name string
    age int
    mux sync.Mutex
}

func (this *Pet)SetName(name string) {
    this.mux.Lock()
    defer this.mux.Unlock()
    this.name = name
}

func (this *Pet)GetName() string {
    this.mux.Lock()
    defer this.mux.Unlock()
    return this.name
}

func (this *Pet)SetAge(age int) {
    this.mux.Lock()
    defer this.mux.Unlock()
    this.age = age
}

func (this *Pet)GetAge() int {
    this.mux.Lock()
    defer this.mux.Unlock()
    return this.age
}

func (this *Pet)IncrementAge() {
    this.mux.Lock()
    defer this.mux.Unlock()
    this.age++
}
func TestGetInstance(t *testing.T) {
    p := GetInstance()
    p.SetAge(10)
    p.IncrementAge()
    fmt.Println("p 的 Age现在是", p.GetAge())
    
    q := GetInstance()
    q.IncrementAge()
    fmt.Println("q 的 Age现在是", q.GetAge())
}
/*
=== RUN   TestGetInstance
p 的 Age现在是 11
q 的 Age现在是 12
--- PASS: TestGetInstance (0.00s)
PASS
*/

优点

  • 内存中只有一个实例,减少了内存开支,尤其一个对象需要频繁地创建销毁,而此时性能又无法优化时,单例模式的优势就非常明显;
  • 避免对资源的多重占用(比如写文件操作,只有一个实例时,避免对同一个资源文件同时写操作),简单来说就是对唯一实例的受控访问。

缺点

  • 没有接口,不能继承,与单一职责冲突。

使用场景

  • 要求生成唯一序列号的环境;
  • 在整个项目中有一个共享访问点或共享数据(如web页面上的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来即可);
  • 创建一个对象需要消耗的资源过多时(如访问I/O和数据库等资源)。

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

网友评论

      本文标题:设计模式——单例模式

      本文链接:https://www.haomeiwen.com/subject/uiluvktx.html