zoukankan      html  css  js  c++  java
  • C#几种单例模式

        /**
         * 单例模式-饿汉式
         */
        public class Singleton
        {
            // 在定义的时候就初始化_instance,
            private static Singleton _instance = new Singleton();
    
            // 够造函数必须是私有的,不能被外部直接调用。
            private Singleton()
            {
            }
    
            // 暴露给外部,提供实例。
            public static Singleton getInstance()
            {
                return _instance;
            }
        }
        /**
         *  单例模式-懒汉式(一)
         */
        public class Singleton
        {
            private static Singleton _instance;
    
            // 够造函数必须是私有的,不能被外部直接调用。
            private Singleton()
            {
            }
    
            // 暴露给外部,提供实例。
            public static Singleton getInstance()
            {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
                return _instance;
            }
        }
        /**
         *  单例模式-懒汉式(二)
         */
        public class Singleton
        {
            private static Singleton _instance;
            private static readonly object synchronized = new object();
            // 够造函数必须是私有的,不能被外部直接调用。
            private Singleton()
            {
            }
    
            // 暴露给外部,提供实例。
            public static Singleton getInstance()
            {
                if (_instance == null)
                {
                    lock (synchronized)  //加锁防止多线程
                    {
                        if (_instance == null)
                        {
                            _instance = new Singleton();
                        }
                    }
                }
                return _instance;
            }
        }
        /**
         *  单例模式-懒汉式(四)
         */
        public class Singleton
        {
            // 够造函数必须是私有的,不能被外部直接调用。
            private Singleton()
            {
            }
    
            // 暴露给外部,提供实例。
            public static Singleton getInstance()
            {
                return SingletonHolder._instance;
            }
    
            // 静态内部内,实现延时加载
            private static class SingletonHolder
            {
                public static Singleton _instance = new Singleton();
            }
        }
    /*
    *懒汉式加锁解决多线程安全问题
    */
    public class Singleton
        {
            private static Singleton _instance;
            private static readonly object syn = new object();
            private Singleton() //构造函数设置private,不能被new,单例模式
            {
    
            }
            public static Singleton CreateInstance()
            {
                if (_instance == null)
                {
                    lock (syn)  //加锁防止多线程
                    {
                        if (_instance == null)
                        {
                            _instance = new Singleton();
                        }
                    }
                }
                return _instance;
            }
        }
    /*
    *使用.NET4的Lazy<T>类型
    */
    public sealed class Singleton
    {
        private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());
    
        public static Singleton Instance 
        {
            get 
            {
                return lazy.Value;
            }
        }
    
        private Singleton()
        {
        }
    }
    /*
    *完全延迟加载实现(fully lazy instantiation)
    */
    public sealed class Singleton
    {
        private Singleton()
        {
        }
    
        public static Singleton Instance 
        {
            get
            {
                return Nested.instance;
            }
        }
    
        private class Nested
        {
            // Explicit static constructor to tell C# compiler
            // not to mark type as beforefieldinit
            static Nested()
            {
            }
    
            internal static readonly Singleton instance = new Singleton();
        }
    }
    /*
    * 双重验证的线程安全实现
    */
    public sealed calss Singleton
    {
        private static Singleton instance = null;
        private static readonly object padlock = new object();
    
        Singleton()
        {
        }
    
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        } 
    }
    好好学习,天天向上。
  • 相关阅读:
    16进制数至字符串转换
    综合评价模型C++实现
    综合评价模型
    Eigen使用矩阵作为函数参数
    Eigen子矩阵操作
    Eigen矩阵基本运算
    c++矩阵运算库Eigen简介
    三次样条插值算法C++实现
    一个 图片 滚动 飞入的css特效
    在TTF字体中提取想要的文字
  • 原文地址:https://www.cnblogs.com/Zhengxue/p/13141618.html
Copyright © 2011-2022 走看看