zoukankan      html  css  js  c++  java
  • C#设计模式01——单例模式的三种写法

    第一种

     //在方法里new  ,这里使用 双if-lock
        public  class SingleFirst
        {
            private static SingleFirst _SingleFirst;
            private static readonly object _Single_Lock = new object();
            private SingleFirst() { }
            public static SingleFirst GetInstance()
            {
                if(_SingleFirst == null)
                {
                    lock (_Single_Lock)
                    {
                        if(_SingleFirst == null)
                        {
                            _SingleFirst = new SingleFirst();
                        }
                    }
                }
                return _SingleFirst;
            }
            
        }

    第二种

        /// <summary>
        /// 在构造函数里new(), 在方法返回
        /// </summary>
        public class SingleSecond
        {
            private static SingleSecond _SingleSecond = null;
            private SingleSecond() { }
            static SingleSecond()
            {
                _SingleSecond = new SingleSecond();
              
            }
            public  static  SingleSecond GetInstance()
            {
                return _SingleSecond;
            }
        }

    第三种

        /// <summary>
        /// 在静态字段里new(),方法里返回
        /// </summary>
        public class SingleThrid
        {
            private static SingleThrid _SingleThird = new SingleThrid();
            private SingleThrid() { }
            public static SingleThrid GetInstance()
            {
                return _SingleThird;
            }
        }

    运行测试

                    var a1 = SingleFirst.GetInstance();
                    var a2 = SingleFirst.GetInstance();
                    Console.WriteLine($"a1 和 a2 是同一实例:{ object.ReferenceEquals(a1, a2)}");
                    ;
                    var b1 = SingleSecond.GetInstance();
                    var b2 = SingleSecond.GetInstance();
                    Console.WriteLine($"b1 和 b2 是同一实例:{ object.ReferenceEquals(a1, a2)}");
                    var c1 = SingleThrid.GetInstance();
                    var c2 = SingleThrid.GetInstance();
                    Console.WriteLine($"c1 和 c2 是同一实例:{ object.ReferenceEquals(a1, a2)}");

    源码下载:https://gitee.com/weilong2020/csharp_23_-design-patterns.git

    !

    • 作       者 : 明志德道
    • 希     望: 如果内容对您有用,动动小手点个赞吧,您的支持就是我持续写作的动力!
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
  • 相关阅读:
    ubuntu 14.04下使用fcitx时将caps lock映射为ctrl
    php多进程、IPC和事件驱动
    [轉載]【京都动画统治世界】短篇科幻小说《2134动漫奇缘》
    [日语]每日笔记
    [转载]C++的顺序点(sequence point)和副作用(side effect)
    [转载]Best Practices for Speeding Up Your Web Site
    [系统]安装fedora 19
    阿里云服务上面部署redis + 本地Redis客户端连接方法 + 配置redis服务
    linux [Centos7]搭建PHP的RabbitMQ环境
    linux vim常用操作
  • 原文地址:https://www.cnblogs.com/for-easy-fast/p/14374045.html
Copyright © 2011-2022 走看看