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

    /*
         单例模式
     
             饿汉式 :第一时间创建实例,类加载就马上创建
             懒汉式 :需要才创建实例,延迟加载
     
             单例模式会长期持有一个对象,不会释放
             普通实例使用完后释放
     
             单例可以只构造一次,提升性能(如果构造函数耗性能)
    
             单例就是保证类型只有一个实例:计数器/数据库连接池
     
             程序中某个对象,只有一个实例
        */
    
        /// <summary>
        /// 单例之懒汉模式
        /// </summary>
        public class SingleDemo
        {
            private static SingleDemo _singleDemo=null;
            //创建访问这对象,用于加锁
            private static object SingleDemo_lock = new object();//锁同步
            /// <summary>
            /// 私有构造函数 防止来访者实例化
            /// </summary>
            private SingleDemo()
            {
              
            }
    
            public static SingleDemo WriteName()
            {
                if (_singleDemo == null)
                {
                    lock (SingleDemo_lock)
                    {
                        if (_singleDemo == null)
                        {
                            Console.WriteLine("被创建");
                            _singleDemo = new SingleDemo();
                        }
                        Console.WriteLine("使用");
                    }
                }
    
                return _singleDemo;
            }
        }
    
    
        /// <summary>
        /// 单例之饿汉模式
        /// 使用静态字段
        /// </summary>
        public class SingleDemo1
        {
            private static readonly SingleDemo1 _singleDemo1 = new SingleDemo1();
            private SingleDemo1()
            { }
            public static SingleDemo1 WriteName()
            {
                return _singleDemo1;
            }
        }
    
        /// <summary>
        /// 单例之饿汉模式
        /// 使用静态构造函数
        /// </summary>
        public class SingleDemo2
        {
            private static int num = 0;
            private static SingleDemo2 _singleDemo2 = null;
            static SingleDemo2()
            {
                num += 2;
                _singleDemo2 = new SingleDemo2();
                Console.WriteLine(num);
            }
            public static SingleDemo2 WriteName()
            {
                num += 1;
                Console.WriteLine(num);
                return _singleDemo2;
            }
        }
    
    
    
     /// <summary>
            /// 调用
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                TaskFactory taskFactory = new TaskFactory();
                List<Task> taskList = new List<Task>();
    
                for (int i = 0; i < 5; i++)
                {
                    taskList.Add(taskFactory.StartNew(() =>
                    {
                        //SingleDemo singleDemo = SingleDemo.WriteName();
                        //SingleDemo1 singleDemo1 = SingleDemo1.WriteName();
                        SingleDemo2 singleDemo2 = SingleDemo2.WriteName();
                    }));
                }
                Console.ReadKey();
            }
  • 相关阅读:
    获取Android状态栏高度的屡试不爽的方法
    在线音乐API的研究 (Part 2.1)
    Zabbix
    利用 Puppet 实现自动化管理配置 Linux 计算机集群
    django的admin后台管理如何更改为中文
    windows系统安装python3.6.3和python3.7.0
    微课程--Android--高级控件之二--标题栏
    微课程--Android--高级控件之一ListView
    微课程--Android--Fragement
    微课程--Android--界面布局总结
  • 原文地址:https://www.cnblogs.com/pushYYL/p/13080178.html
Copyright © 2011-2022 走看看