zoukankan      html  css  js  c++  java
  • 从C#角度 单例模式 懒汉和饿汉

    单例模式:
       
         关键点: 1、一个类只有一个实例; 2、类自行创建该实例; 3、类自行向整个系统提供该实例。

    代码展示:

    namespace SingleTon
    {
        /// <summary>
        /// 懒汉单例、多线程安全
        /// 比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
        /// </summary>
        public class LazySingleTon
        {
            private static LazySingleTon instance = null;
            //多线程安全
            private static object lockObject = new object();
            private LazySingleTon()
            {
                Console.WriteLine("private LazySingleTon()");
            }
    
            public static LazySingleTon Instance
            {
                get
                {
                    //不必每次锁,提高效率
                    if (instance == null)
                    {
                        //多线程安全
                        lock (lockObject)
                        {
                            if (instance == null)
                            {
                                return new LazySingleTon();
                            }
                        }
                    }
                    return instance;
                }
            }
        }
    
        /// <summary>
        /// 饿汉单例
        /// 在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
        /// </summary>
        public class EagerSingleTon
        {
            // readonly 分配的动态内存
            private static readonly EagerSingleTon instance = new EagerSingleTon();
    
            private EagerSingleTon()
            {
                Console.WriteLine("private EagerSingleTon()");
            }
    
            public static EagerSingleTon Instance
            {
                get
                {
                    return instance;
                }
            }
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                var lazy = LazySingleTon.Instance;
                var eager = EagerSingleTon.Instance;
            }
        }
    }
  • 相关阅读:
    Troubleshooting a Jedis Connection Pool Error
    com.mysql.cj.jdbc.exceptions.CommunicationsException
    springboot tomcat连接池
    Spring官方文档
    Troubleshooting-Spring-RestTemplate-Requests-Timeout
    Linux进程和端口命令总结
    Git及GitLab使用手册
    MySQL数据库命令大全
    两天时间,实现自己的 Promise
    vue-cli3.0搭建服务端渲染SSR
  • 原文地址:https://www.cnblogs.com/uicodeintoworld/p/8986785.html
Copyright © 2011-2022 走看看