编程语言
首页 > 编程语言> > C# 单例模式

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

 

标签:C#,SingleDemo1,SingleDemo2,private,static,模式,单例,SingleDemo
来源: https://www.cnblogs.com/pushYYL/p/13080178.html