• C#设计模式:Singleton模式


    如何保证一个类只能有一个实例存在?
    在多线程情况下如何解决?
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Singleton
    {
        
    class Singleton
        
    {
            
    //构造函数私有化,保证不被显式实例化
            private Singleton() { }

            
    //定义属性,返回Singleton对象
            private static Singleton singleton;

            
    public static Singleton Instance
            
    {
                
    get
                
    {
                    
    if (singleton == null)
                        singleton 
    = new Singleton();
                    
    return singleton;
                }

            }

        }

    }


    //多线程版本的Singleton
    namespace SingletonMultiThread
    {
        
    class Singleton
        
    {
            
    private static object lockHelper = new object();

            
    //构造函数私有化,保证不被显式实例化
            private Singleton() {}

            
    //定义属性,返回Singleton对象
            private static volatile Singleton singleton = null;

            
    public static Singleton Instance
            
    {
                
    get
                
    {
                    
    if (singleton == null)
                    
    {
                        
    lock (lockHelper)
                        
    {
                            
    if (singleton == null)
                                singleton 
    = new Singleton();
                        }

                    }

                    
    return singleton;
                }

            }

        }

    }


    //经典的Singleton实现:仅仅适合无参构造器对象(可用属性实现扩展)
    namespace classicalSingleton
    {
        
    sealed class Singleton
        
    {
            
    private Singleton() { }
            
    //内联初始化,后面的new是个静态构造器
            public static readonly Singleton Instance = new Singleton();
        }


        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                Singleton s1 
    = Singleton.Instance;
                Singleton s2 
    = Singleton.Instance;
                
    if (object.ReferenceEquals(s1, s2))
                    Console.WriteLine(
    "两个对象是相同的实例。");
                
    else
                    Console.WriteLine(
    "两个对象非相同的实例。");
            }

        }

    }

  • 相关阅读:
    Spark学习进度1——Scala安装
    Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
    Spark学习进度2——Scala基础
    自我成长
    node服务容器 serve 和 httpserve
    TS中接口
    js计算当前时间差
    【转载】 centos7.0 安装字体库
    Python 二进制 雪花算法
    Django 重新生成表结构
  • 原文地址:https://www.cnblogs.com/flaaash/p/1020841.html
Copyright © 2020-2023  润新知