zoukankan      html  css  js  c++  java
  • c#设计模式之单例模式

    单例模式(Singleton Pattern )就是为了整个应用程序的生命周期内的任何时刻,类只能创建一个实例。

    单线程下的单例模式代码:

    public class Singleton
        {
            private Singleton() { }     //(1)
    
            private static Singleton _singleton; //(2)
    
            public static Singleton GetSingleton () //(3)
            {
    if (_singleton == null) _singleton = new Singleton(); return _singleton; } }

    注意:

    (1)构造函数用private修饰,以防外部通过new来实例化;

    (2)因为静态变量的生命周期和整个应用程序的生命周期是一样的,所以定义一个私有的静态全局变量_singleton来保存该类的唯一实例;

    (3)提供一个全局方法访来获得该唯一实例。

    多线程下的单例模式:

    在多线程的情况下,以上的代码是不安全的,当有两个线程同一时刻执行上面的代码,因为_singleton同时为空,所以会执行_singleton = new Singleton()得到两个实例。

    为了满足线程安全,需要用到同步锁

    public class Singleton2
        {
            private Singleton2() { }
    
            private static Object locker = new Object();
    
            private static Singleton2 _singleton; 
    
            public static Singleton2 GetSingleton () 
            {
    lock (locker) { if (_singleton == null) _singleton = new Singleton2(); return _singleton;
    } } }

    这个时候,任意时刻只能由一个线程可以访问lock(locker){}里的代码,其他线程只能排队,等待当前线程释放锁后才可以访问该代码,这样就可以保证实例的唯一性。

  • 相关阅读:
    Linux下C编程入门(1)
    Git 常用命令速查表
    Git Cheat Sheet 中文版
    Linux 在一个命令行上执行多个命令
    一个奇怪的错误的警示
    模块化编程实例(一)
    含有指针变量的结构体的指针的应用
    iOS 开发加密做法
    关于设置shadowPath的重要性
    关于设置shadowPath的重要性
  • 原文地址:https://www.cnblogs.com/qk2014/p/4515003.html
Copyright © 2011-2022 走看看