美文网首页
单例模式

单例模式

作者: 小幸运Q | 来源:发表于2021-02-17 22:48 被阅读0次
    • 对象不唯一,浪费内存空间,相互覆盖。

    用小写字母开头默认private

    • 饱汉模式
    package main
    
    import ("fmt")
    type config struct {
        Name string
    }
    
    var cfg *config
    
    func initConfig() *config {
        if cfg==nil {
            cfg = &config{"config"}
            return cfg
        }else{
            return cfg
        }
    }
    
    func main() {
        f:=initConfig()
        fmt.Println(f.Name)
    }
    
    • 饿汉模式
    package main
    
    import ("fmt")
    type config struct {
        Name string
    }
    
    var cfg *config =&config{"config"}
    
    func initConfig() *config {
            return cfg
    }
    
    func main() {
        f:=initConfig()
        fmt.Println(f.Name)
    }
    
    • 线程安全
    package main
    
    import (
        "fmt"
        "sync"
        "time"
    )
    type config struct {
        Name string
    }
    
    var cfg *config
    
    var oSingle sync.Once
    
    func initConfig() *config {
        oSingle.Do(
            func() {
                cfg = &config{"config"}
    
        })
        // cfg = &config{"config"} 
        //比较用
        return cfg
    }
    func main() {
        //fmt.Println(&cfg.Name)
        for i := 0; i <3; i++ {
            go func() {
                initConfig()
                fmt.Println(&cfg.Name)
                // fmt.Println(&cfg) 
                //访问指针的地址木有用,因为指针地址没变,变的是struct对象
            }()
        }
        time.Sleep(time.Second)
    }
    
    • 使用map来存储 string -> object 利用内存做缓存

    C++版Singleton(static变量配static函数)

    class CSingleton
    {
    private:
        CSingleton()   //构造函数是私有的
        {
        }
        static CSingleton *m_pInstance;
    public:
        static CSingleton * GetInstance()
        {
            if(m_pInstance == NULL)  //判断是否第一次调用
                m_pInstance = new CSingleton();
            return m_pInstance;
        }
    };
    

    相关文章

      网友评论

          本文标题:单例模式

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