• 设计模式(一)单例模式,实例 狼


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace 设计模式
    {
        class Program
        {
            static void Main(string[] args)
            {

                Singleton instance = new Singleton();
                Singleton instance2 = new Singleton();
                Singleton instance3 = new Singleton();

                Console.WriteLine(instance.Age);
                Console.WriteLine(instance2.Age);
                Console.WriteLine(instance3.Age);
                Console.Read();
            }
        }

        public sealed class Singleton
        {
            public Singleton()
            {

            }
            //#region 设计模式第一到第三种方案。
            ///// <summary>
            ///// 在不加线程锁时,可能由于并发,产生多个实例,违背返回单个实例原则。及失去了单利模式的意义。
            ///// 在加了线程锁以后,倒是每个实例的引用Instance时,都进行线程锁判断导致,性男女下降。
            ///// 所以引入,在外城在加判断,如果为空的时候才进入线程锁处理,这样只有在空的情况下才进入线程处理,
            ///// 所以,在空的情况下并发,只有首次实例的时候才会引起,所以提高效率。在锁的内部在进行实例是否存在验证,加双重判断
            ///// 以保证实例运行
            ///// </summary>
            //static Singleton instance = null;
            //static readonly Object lockBao = new object();//第二种,第三种方案使用,为线程锁
            //public Singleton Instance
            //{
            //    get
            //    {
            //        if (instance==null)
            //        {
            //            lock (lockBao)//
            //            {
            //                if (instance == null)
            //                {
            //                    instance = new Singleton();
            //                }
            //            }
            //        }
            //        return instance;
            //    }
            //}
            //#endregion


            //#region 比较常用的方式
            ///// <summary>
            ///// 第四种方式:类声明为sealed 目的是为防止,之类派生导致实例增加。
            ///// 变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
            ///// 仍然不能实现延迟初始。
            ///// </summary>
            /////
            //static Singleton()
            //{

            //}
            //static readonly Singleton Instacne = new Singleton();
            //public Singleton Instance
            //{
            //    get
            //    {
            //        return Instacne;
            //    }
            //}

            //#endregion

            public  int Age
            {
                get
                {
                    return 11;
                }
            }
            #region
            /// <summary>
            /// 可以实现延迟初始,是比较好的一种方案,简单明了。
            ///  初始化比较耗时,而且每次程序运行不一定都要访问它。
            /// </summary>
            public Singleton Instance
            {
                get
                {

                    return Nested.instance;
                }
            }

     
            #endregion
        }

        class Nested
        {

            static Nested()
            {

            }
            internal static readonly Singleton instance = new Singleton();
        }
    }

  • 相关阅读:
    nginx源代码分析--从源代码看nginx框架总结
    [Android]自己定义带删除输入框
    A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
    cmake使用演示样例与整理总结
    Hibernate也须要呵护——Hibernate的泛型DAO
    hdoj-1242-Rescue【广搜+优先队列】
    五类常见算法小记 (递归与分治,动态规划,贪心,回溯,分支界限法)
    动态标绘演示系统1.4.3(for ArcGIS Flex)
    CodeForces
    OpenCV——颜色运算
  • 原文地址:https://www.cnblogs.com/gowhy/p/1998972.html
Copyright © 2020-2023  润新知