zoukankan      html  css  js  c++  java
  • 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(
    "两个对象非相同的实例。");
            }

        }

    }

  • 相关阅读:
    [HEOI2014]人人尽说江南好 博弈论
    [HNOI2014]江南乐 博弈论
    [SDOI2011]黑白棋 kth
    [NOI2011]兔兔与蛋蛋游戏 二分图博弈
    [JSOI2009]游戏 二分图博弈
    口胡:[HNOI2011]数学作业
    【POJ】【2068】Art Gallery
    【CTSC 2015】&【APIO 2015】酱油记
    【BZOJ】【4052】【CERC2013】Magical GCD
    【BZOJ】【2750】【HAOI2012】Road
  • 原文地址:https://www.cnblogs.com/flaaash/p/1020841.html
Copyright © 2011-2022 走看看