• 单例模式


    单例模式特点:

    • 单例类只能有一个实例。
    • 单例类必须自己创建自己的唯一实例。
    • 单例类必须给所有其他对象提供这一实例。
    • 构造函数是私有的。
    • 没有接口,不能继承(C#最好用sealed class,此修饰符会阻止其他类从该类继承)。

    使用场景:

    • 要求生产唯一序列号。
    • WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
    • 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

    实现一:

    • 懒汉式
    • 线程安全
    • Lazy(延迟加载)
    • 避免内存浪费
        public sealed class Singleton
        {
            private static Singleton instance;
            private static readonly object syncRoot = new object();
            private Singleton() { }
    
            public static Singleton GetInstance()
            {
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }

    实现二:

    • 饿汉式 
    • 线程安全
    • UnLazy  (非延迟加载)
    • 执行效率高
        public sealed class Singleton
        {
            private static readonly Singleton instance = new Singleton();
            private Singleton() { }
            public static Singleton GetInstance()
            {
                return instance;
            }
        }

    使用:

       static void Main(string[] args)
            {
                Singleton s1 = Singleton.GetInstance();
                Singleton s2 = Singleton.GetInstance();
    
                if (s1 == s2)
                {
                    Console.WriteLine("Objects are the same instance");
                }
    
                Console.Read();
            }

    打印结果:

  • 相关阅读:
    java下Mysql基本操作
    利用CNN进行多分类的文档分类
    对WEB url 发送POST请求
    Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析
    Linq转换操作之ToArray,ToList,ToDictionary源码分析
    Linq基础必备
    var 在linq中的使用
    Linq的使用场景简介和认识
    replaceState 实现返回从新定位
    ReSharper
  • 原文地址:https://www.cnblogs.com/xbblogs/p/8308703.html
Copyright © 2020-2023  润新知