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();
            }
        }
  • 相关阅读:
    想要学习编程?不如来玩玩这15款游戏!总有一款适合你!
    C++ 高级教程:C++ 文件和流
    4个小众Chrome插件,最后一个互联网人必备!
    程序员必读,熬夜是如何摧残你的身体的!
    教育部将编程教育纳入中小学相关课程,编程正成为全球语言!
    Windows 比 Linux 好?我有 13 个反对理由
    程序员的十八般兵器库,捋一捋这近几年程序员们日常工作中常用的开源工具
    how to train yolov4 on custom dataset
    How to Perform Object Detection With YOLOv3 in Keras
    YOLOv4 / Scaled-YOLOv4 / YOLO
  • 原文地址:https://www.cnblogs.com/lhl123/p/10637433.html
Copyright © 2011-2022 走看看