美文网首页程序员
单例模式(Go)

单例模式(Go)

作者: 高稚商de菌 | 来源:发表于2018-03-06 21:28 被阅读0次

单例模式是23种面向对象的设计模式之一。在实际应用中,涉及到配置或资源管理的对象,都应该考虑单例模式。广义上讲,只要能够保证只执行一次类的实例化过程,就能实现单例模式。如果某段代码确实只会执行一次,那么就是一个天然的单例模式,比如python里的模块导入。而有的时候,初始化对象的函数可能要执行多次,这时就需要对类的实例化进行拦截。单例模式最基本的问题,是判断是否类已经实例化,这就需要用一个变量,来判断,比如锁,全局变量,类变量(Python), 闭包(Python)等等。

type singleton struct {}
var single *singleton

1.最简单的单例模式

// 非线程安全的单例模式
func GetInstance1() *singleton {
    if single == nil {
        single = &singleton{}
    }
    return single
}

2.线程安全的单例模式

// 线程安全的单例模式
import "sync"
var lock sync.Mutex

func GetInstance2() *singleton {
    lock.Lock()
    defer lock.Unlock()
    if single == nil {
        single = &singleton{}
    }
    return single
}

3.优化的线程安全单例模式

// 线程安全的单例模式,且降低锁的开销
func GetInstance3() *singleton {
    if single == nil {
        lock.Lock()
        defer lock.Unlock()
        if single == nil {
            single = &singleton{}
        }
    }
    return single
}

4. 使用sync.Once

// 使用sync.Once, 代码最优雅
var once sync.Once
func GetInstance3() *singleton {
    once.Do(func(){
        single = &singleton{}
    })
    return single
}

相关文章

  • Go语言设计模式(1)单例模式

    Go语言设计模式(1)单例模式 单例模式的定义 个人认为单例模式是23种设计模式中最简单也最好理解的一种,定义如下...

  • 单例模式(Go)

    单例模式是23种面向对象的设计模式之一。在实际应用中,涉及到配置或资源管理的对象,都应该考虑单例模式。广义上讲,只...

  • Go单例模式

    单例模式回顾 以前在做java的时候,经常会用到设计模式,如单例模式、工厂模式、观察者模式等。其实设计模式和语言无...

  • go设计模式代码实现

    go 设计模式代码实现 单例模式 代码实现 type singleton struct{} var ins *si...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • Go语言:单例模式

    转载至 https://www.yuque.com/docs/share/17c247e8-961d-4cb1-a...

  • Go的单例模式

  • gof23创建类模式(golang版)

    区块链的征程已开启 单例模式 Java中的单例模式的实现可以有饿汉式、懒汉式、双锁、静态内部类、枚举等形式,在go...

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

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

网友评论

    本文标题:单例模式(Go)

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