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();
            }
        }
  • 相关阅读:
    測试能否发表博客
    换站点Logo图片---轻开电子商务系统(企业入门级B2C站点)
    后台运行命令:&和nohup command & 以及关闭、查看后台任务
    HttpClient将手机上的数据发送到服务器
    支付宝电脑网站支付
    远程使用tomcat8的首页的管理工具
    数据结构之链表基本操作
    数据结构之链表反向打印
    ultraedit开发使用技巧
    charles抓取https中出现unknow
  • 原文地址:https://www.cnblogs.com/lhl123/p/10637433.html
Copyright © 2011-2022 走看看