• 单例模式 -- 大话设计模式


    在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

    单例模式:保证一个类只有一个实例,并听一个访问它的全局访问点;单例的实现分为两种,懒汉式单例模式和饿汉式单例模式

    1.懒汉式单例模式

        public class Singleton
        {
            private static Singleton instance;
    
            //进程辅助对象,多线程同时访问该类时,对该对象加锁,只有一个线程可以进入
            private static readonly object syncRoot = new object();
    
            /// <summary>
            /// 定义个私有的构造方法,防止外界通过new创建该类的实例
            /// </summary>
            private Singleton() { }
    
            /// <summary>
            /// 获取本类实例的唯一全局访问点
            /// </summary>
            public static Singleton GetInstance()
            {
                //先判断实例是否存在,不存在再加锁,提高访问性能
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
    
                return instance;
            }
    
            public void Action()
            {
                Console.WriteLine("我是单例的具体业务……");
            }
        }
    

     2.饿汉式单例模式

        /// <summary>
        /// 防止派生,派生可能会增加实例
        /// </summary>
        public sealed class Singleton
        {
            //由于定义为readonly,意味着只能在静态初始化期间或者构造函数中分配变量
            private static readonly Singleton instance = new Singleton();
    
            /// <summary>
            /// 定义个私有的构造方法,防止外界通过new创建该类的实例
            /// </summary>
            private Singleton() { }
    
            /// <summary>
            /// 获取本类实例的唯一全局访问点(由于定义了静态的只读变量,因此不需要考虑线程安全问题)
            /// </summary>
            public static Singleton GetInstance()
            {
                return instance;
            }
    
            public void Action()
            {
                Console.WriteLine("我是单例的具体业务……");
            }
        }
    

       开启场景模拟

            static void Main(string[] args)
            {
                Singleton.GetInstance().Action();
            }
    
  • 相关阅读:
    Ubuntu开机自动挂载Windows分区
    Ubuntu 修改hosts
    线程安全
    可重入
    java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet问题
    两数相加
    2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)
    Anniversary party
    k倍区间
    算法训练 素因子去重
  • 原文地址:https://www.cnblogs.com/amywechat/p/4936214.html
Copyright © 2020-2023  润新知