码迷,mamicode.com
首页 > Windows程序 > 详细

C# 单例模式

时间:2020-06-09 20:41:37      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:一个   使用   public   ++   访问   color   防止   数据库   数据库连接池   

/*
     单例模式
 
         饿汉式 :第一时间创建实例,类加载就马上创建
         懒汉式 :需要才创建实例,延迟加载
 
         单例模式会长期持有一个对象,不会释放
         普通实例使用完后释放
 
         单例可以只构造一次,提升性能(如果构造函数耗性能)

         单例就是保证类型只有一个实例:计数器/数据库连接池
 
         程序中某个对象,只有一个实例
    */

    /// <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();
        }

 

C# 单例模式

标签:一个   使用   public   ++   访问   color   防止   数据库   数据库连接池   

原文地址:https://www.cnblogs.com/pushYYL/p/13080178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!