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();
            }
        }
  • 相关阅读:
    MySQL配置文件
    Linux安装MySQL以及版本说明
    RabbitMQ之Routing(路由有选择的接收)
    RabbitMQ之Publish/Subscribe(发布/订阅)
    RabibitMQ之Work Queues
    RabbitMQ简单生产者消费者(一对一)发送消息
    Linux下安装RabbitMQ
    PyQt5+qtdesigner开发环境配置
    利用sql语句建立全国省市区三级数据库
    完整项目:网上图书商城(一、MySQL数据库设计)未完
  • 原文地址:https://www.cnblogs.com/lhl123/p/10637433.html
Copyright © 2011-2022 走看看