• 设计模式:重读(单例)


    对于单例,程序内使用有如下的区分:

    1: 延迟加载型:

     1.1 : 单线程

     1.2 : 多线程 线程安全型 

    2:非延迟加载型:

    其中个人感觉,程序内大部分都是使用的延迟加载型。总结代码如下:

       /// <summary>
        /// 延迟型:单线程单例
        /// </summary>
        public class Singleton
        {
            private static Singleton instance = null;
            private Singleton() { }
            public static Singleton Instance
            {
                get
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                    return instance;
                }
            }
            public int Value { get; set; }
        }
    
        /// <summary>
        /// 延迟型:多线程单例
        /// </summary>
        public class Singleton_MulThread
        {
            private static Singleton_MulThread instance = null;
            private static object lockHelper = new object();
            private Singleton_MulThread() { }
            public static Singleton_MulThread Instance
            {
                get
                {
                    if (instance == null)
                    {
                        lock (lockHelper)
                        {
                            if (instance == null)
                            {
                                instance = new Singleton_MulThread();
                            }
                        }
                    }
                    return instance;
                }
            }
            public int Value { get; set; }
        }
    
        /// <summary>
        /// 非延迟型: 因为初始化是.net Framwork控制的。不能具体控制程序,所以在简单的程序内使用是没问题的。线程安全 
        /// </summary>
        public sealed class Singleton_Static
        {
            static readonly Singleton_Static instance = new Singleton_Static();
    
            static Singleton_Static()
            {
            }
    
            Singleton_Static()
            {
            }
    
            public static Singleton_Static Instance
            {
                get
                {
                    return instance;
                }
            }
        }


    备注:请注意上面多线程的两个判断, 其中第一个判断是用来使多线程中的Lock次数变少,提高多线程性能而加入的。

             if (instance == null)
                   {
                        lock (lockHelper)
                        {
                            if (instance == null)
                            {
                                instance = new Singleton_MulThread();
                            }
                        }
                    }
  • 相关阅读:
    vue 零散记录
    flex布局-弹性布局
    apply 和 call 的用法
    git版本控制系统重新认识
    Windows驱动过滤--kdbclass过滤,寒江独钓加强版
    Socket的select制作多客户端传输(Qt)
    基于g_soap制作的数据下载器,传输速度只有600kb 需改进
    lua中获取数组长度问题
    MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)
    lua接受C++返回值
  • 原文地址:https://www.cnblogs.com/xiaolb/p/3664416.html
Copyright © 2020-2023  润新知