• 1.单件模式(Singleton Pattern)


    意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    1.简单实现(多线程有可能产生多个实例)

        public class CommonSigleton
        {    
            /// <summary>
            /// 私有的对象
            /// </summary>
            private static CommonSigleton instance;
            
            /// <summary>
            /// 构造方法为Private
            /// </summary>
            private CommonSigleton()
            {
                
            }
            
            /// <summary>
            /// 公有的属性
            /// </summary>
            public static CommonSigleton Instance
            {
                get
                {
                    if(instance == null)
                    {
                        instance = new CommonSigleton();
                    }
    
                    return instance;
                }
            }
        }
    View Code

    2.双重锁定实现(lock关键字)

        public class DoubLockSigleton
        {    
            private static volatile DoubLockSigleton instance;
            
            /// <summary>
            /// 辅助锁对象,本身没有意义 
            /// </summary>
            private static object syncRoot = new Object();
    
            /// <summary>
            /// 构造方法改为Private
            /// </summary>
            private DoubLockSigleton()
            {
                
            }
    
            public static DoubLockSigleton Instance
            {
                get 
                {
                    if (instance == null) 
                    {
                        lock (syncRoot) 
                        {
                            if (instance == null) 
                                instance = new DoubLockSigleton();
                        }
                    }
    
                    return instance;
                }
            }
        }
    View Code

    3.利用C#特性实现

        ///该类标记sealed阻止发生派生增加实例
        public sealed class DotNetSigleton
        {
            //变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
            //公共静态属性为访问实例提供了一个全局访问点。此外,由于构造函数是私有的,因此不能在类本身以外实例化
            private static readonly DotNetSigleton instance = new DotNetSigleton();
    
            //由于 Singleton 实例被私有静态成员变量引用,因此在类首次被对Instance属性的调用所引用之前,不会发生实例化。
            private DotNetSigleton(){}
    
            public static DotNetSigleton Instance
            {
                get 
                {
                    return instance; 
                }
            }
        }
    View Code
  • 相关阅读:
    Leetcode(680) ;验证回文字符串 Ⅱ
    mysql常用操作语句
    组合索引问题
    php生成一维码以及保存-转载
    php后台实现页面跳转的方法-转载
    php操作表格(写)
    虚拟机复制后上网冲突的问题
    centos下安装nginx(转载)
    虚拟机与宿主机可以互相ping通,但是外网不能
    防火墙设置:虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4628636.html
Copyright © 2020-2023  润新知