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

    1:饥饿模式

     public class Class1
        {
            public readonly static Class1 c1 = new Class1();//直接创建一个
            //构造函数私有化 禁止其他地方创建实例
            private Class1()
            { }
            //对外提供一个方法来返回
            public static Class1 GetSign()
            {
                return c1;
            }
        }

    2:懒加载

    public class Class2
        {
            private static Class2 c2 = null;
            private readonly static object objLock = new object();
    
            private Class2()
            {
    
            }
            public static Class2 GetSign()
            {
                if (c2 == null)//提高性能 是null的时候才加锁
                {
                    lock (objLock)//加锁 为了 线程安全
                    {
                        if (c2 == null)
                        {
                            c2 = new Class2();
                        }
                    }
                }
                return c2;
            }
        }

    进阶的懒惰:参考的:https://www.cnblogs.com/leolion/p/10241822.html

     public sealed class Class3
        {
            //构造函数私有化
            //说实话 这种我还不太懂,可以去看看原文
            private Class3()
            { }
            public static Class3 c3 { get { return GetSign.c3; } }
    
            private class GetSign
            {
                // 显式静态构造告诉C#编译器
                // 未标记类型BeforeFieldInit
                static GetSign()
                {
                }
    
                internal static readonly Class3 c3 = new Class3();
            }
          
    
        }

    进阶2:使用Lazy

    public sealed class Class4
        {
            //延迟初始化
            // 初始化 System.Lazy`1 类的新实例。 当延迟初始化发生时,将使用指定的初始化函数和初始化模式。
            //第二个参数 表示 线程安全为true 
            //哈哈,我也第一次晓得这个方式。新奇
            private static readonly Lazy<Class4> lazyC4 = new Lazy<Class4>(() => new Class4(),true);
            public static Class4 c4 { get { return lazyC4.Value; } }
            private Class4()
            { }
        }
  • 相关阅读:
    alpha版本发布前的进度
    1.26~1.27
    1.23~1.25
    1月21日~1月22日工作情况
    1月17日工作情况
    1月16日小组开会
    1月15日工作进度
    1月12日~1月14日工作进度
    linux下的动态链接库管理
    小组第一次小组讨论
  • 原文地址:https://www.cnblogs.com/fanlin92/p/13743684.html
Copyright © 2011-2022 走看看