zoukankan      html  css  js  c++  java
  • 大话设计模式读书笔记3——单例模式

         单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

    我们来看一下单例模式下的饿汉模式代码:

        /// <summary>
        /// 饿汉模式
        /// </summary>
        public class Singleton
        {
            //私有的构造器
            private Singleton()
            {
            }
    
            //私有的静态实例
            private static Singleton instance = new Singleton();
    
            public static Singleton GetInstance()
            {
                return instance;
            }
        }

    懒汉模式代码:

        /// <summary>
        /// 懒汉模式
        /// </summary>
        public class Singleton2
        {
            //私有的构造器
            private Singleton2()
            {
            }
    
            //私有的静态实例
            private static Singleton2 instance = null;
    
            public static Singleton2 GetInstance()
            {
                if (instance==null)                
                {
                    instance=new Singleton2();
                }
                return instance;
            }
        }

     饿汉模式和懒汉模式的区别:

    饿汉模式加载类时比较慢,但运行时获取对象的速度比较快,线程安全的

    懒汉模式加载类时比较快,但运行时获取对象的速度比较慢,线程不安全的

    C# 下的单例模式:

    1、线程不安全:

     //C# 下的单例模式(线程不安全)
     public class Singleton3
     {
       public static readonly Singleton3 instance = new Singleton3();
    
       private Singleton3()
       {
       }
     }

        上面的实现完全可以达到单例模式的意图,保证一个类仅且有一个实例,并提供一个全局访问点.而这在实际应用我们还得注意一点,就是在多线程的调用.于此,我们还得保证线程安全.要保证线程安全其实也是很简单就可以实现的,只需要通过加锁和双重判断就OK,下面是简单的多线程的线程安全的实现:

    2、线程安全: 

        //C# 下的单例模式(线程安全)
        public class Singleton4
        {
            /// <summary>
            /// 声明一个静态锁
            /// </summary>
            private static object lockHelper = new object();        
    
            //私有构造函数
            private Singleton4()
            {
            }
    
            //注意使用 volatile 关键字
            private static volatile Singleton4 instance = null;
    
            //静态属性
            public static Singleton4 Instance
            {
                get
                {
                    if (instance == null)  //双检查
                    {
                        lock (lockHelper)
                        {
                            if (instance == null)
                            {
                                instance = new Singleton4();
                            }
                        }
                    }
                    return instance;
                }
            }
        }

     --=源码下载=--

  • 相关阅读:
    面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)
    编程思想、软件工程思想、模块内变化时对其他模块的影响
    读林锐《软件工程思想》------讲述软件开发和做程序员的道理
    编程思想的理解(POP,OOP,SOA,AOP)
    javascript alert乱码的解决方法
    curl说明
    手机号正则表达式精简
    织梦自定义表单 在线报名 在线预约听语音
    Html Mailto标签详细使用方法
    织梦DedeCMS提示信息框的修改,修改ShowMsg方法函数
  • 原文地址:https://www.cnblogs.com/lxblog/p/3921733.html
Copyright © 2011-2022 走看看