• 单例模式


    单例模式:保证一个类只有一个实例,并提供给它一个全局访问点。也就是说实例要么没有,有也只能是一个。

    1、最简单的单例模式

        class Singleon
        {
            private static Singleon instance;
    
            private Singleon()
            { }
    
            public static Singleon GetInstance()
            {
                if (instance == null)
                {
                    instance = new Singleon();
                }
                return instance;
            }
        }
    

    客户端代码

            private static void SingleModeTest()
            {
                Singleon s1 = Singleon.GetInstance();
                Singleon s2 = Singleon.GetInstance();
                if (s1 == s2)
                {
                    Console.WriteLine("两个对象实例是相等的");
                }
            }
    

     缺点:在多线程中还是会创建多个实例的。

     2、  多线程下解决被多个实例

        class SingleonMultiThread
        {
            private static SingleonMultiThread instance;
            private static readonly object syncRoot = new object();
    
            private SingleonMultiThread()
            { }
    
            public static SingleonMultiThread GetInstance()
            {
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                        {
                            instance = new SingleonMultiThread();
                        }
                    }
                }           
                return instance;
            }
        }
    

    3、采用静态初始化变量的方法

           sealed class SingleonStaticInit
        {
            private static SingleonStaticInit instance = new SingleonStaticInit();
    
            private SingleonStaticInit()
            { }
    
            public static SingleonStaticInit GetInstance()
            {           
                return instance;
            }
        }
    

        采用静态初始化方法,不需要显示的编写线程安全代码,即可解决多线程环境下不安全问题。第三中方法最好。

    作者:Work Hard Work Smart
    出处:http://www.cnblogs.com/linlf03/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    Android手势锁实现
    网页模板pug基本语法
    React入门看这篇就够了
    我曾站在离你最近的天涯
    一文看懂浏览器事件循环
    Vi编辑网卡
    2019.6.11_MySQL进阶二:主键与外键
    2019.6.13_笔试题目及答案
    2019.6.13_MySQL简单命令的使用
    2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法
  • 原文地址:https://www.cnblogs.com/linlf03/p/2552860.html
Copyright © 2020-2023  润新知