zoukankan      html  css  js  c++  java
  • 单例模式

    1.懒汉模式

    class NormalCase
         {
            public string Name { get; set; }
    
            //第一步:构造函数私有化: 外界不能用new 进行实例
            private NormalCase() { }
    
            //第二步:自行创建一个空实例 static代表只能创建一个实例
            private static NormalCase normalCase=null;//赖汉模式
    
            //第三步:提供外界可访问实例的方法
            public static NormalCase getInstance()
            {
                //存在安全:多线程并发:会产生多个实例
                if (normalCase==null)
                {
                    normalCase = new NormalCase();
                }
                return normalCase;
            }
    
            public void ShowMsg()
            {
                Console.WriteLine(Name);
            }
        }

    2.普通类改为单利模式

    class NormalCase
        {
            public string Name { get; set; }
    
            //第一步:构造函数私有化: 外界不能用new 进行实例
            private NormalCase() { }
    
            //第二步:自行创建一个实例 static代表只能创建一个实例
            private static NormalCase normalCase = new NormalCase();//饿汉模式
    
            //第三步:提供外界可访问实例的方法
            public static NormalCase getInstance()
            {
                return normalCase;
            }
    
            public void ShowMsg()
            {
                Console.WriteLine(Name);
            }
        }

    3.内部静态类实现双重验证

    class NormalCase
        {
            public string Name { get; set; }
    
            //第一步:构造函数私有化: 外界不能用new 进行实例
            private NormalCase() { }
    
            //第二步:内部静态类
            private static class NormalCaseHelper
            {
                public static NormalCase normalCase = new NormalCase();
            }
    
            //第三步:提供外界可访问实例的方法
            public static NormalCase getInstance()
            {
                return NormalCaseHelper.normalCase;
            }
    
            public void ShowMsg()
            {
                Console.WriteLine(Name);
            }
        }

    4.双重验证

    class NormalCase
        {
            //定义一个锁资源
            private static readonly Object obj = new object();
            public string Name { get; set; }
            //第一步:构造函数私有化: 外界不能用new 进行实例
            private NormalCase() { }
    
            //第二步:自行创建一个空实例 static代表只能创建一个实例
            private static NormalCase normalCase=null;//赖汉模式
    
            //第三步:提供外界可访问实例的方法
            public static NormalCase getInstance()
            {
                //一重验证
                if (normalCase==null)
                {
                    lock(obj)
                    {
                        //二重验证
                        if (normalCase == null)
                        {
                            normalCase = new NormalCase();
                        }
                    }              
                }
                return normalCase;
            }
            public void ShowMsg()
            {
                Console.WriteLine(Name);
            }
        }

    5.控制台输出

    class Program
        {
            static void Main(string[] args)
            {
                NormalCase nc = NormalCase.getInstance();
                nc.Name = "Jack";
                nc.ShowMsg();
    
                NormalCase nc1 = NormalCase.getInstance();
                nc1.ShowMsg();
    
                Console.Read();
            }
        }
  • 相关阅读:
    基因组注释
    GapCloser
    Endnote参考文献格式修改
    多行变单行
    AD的基因组【转载】
    ROC曲线
    自我觉察-4:觉察“不浪费食物”和“胃过饱食”的信念
    自我觉察6-我的价值感?
    表观遗传、开放染色质测序、ATAC-seq、ChIP-seq简介
    ADNI(Alzheimer`s disease neuroimaging initiative)介绍
  • 原文地址:https://www.cnblogs.com/lhl123/p/10637433.html
Copyright © 2011-2022 走看看