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(
    "两个对象非相同的实例。");
            }

        }

    }

  • 相关阅读:
    debian 降级
    linux 常用查看设备命令
    viewstate
    linux图形界面编程基本知识
    Java 不适合编写桌面应用
    temp
    ASP.NET中26个常用性能优化方法
    三层架构与MVC的关系
    分页查询前台HTML+后台asp.net代码
    windows身份验证登入数据库 iis 无法访问数据库
  • 原文地址:https://www.cnblogs.com/flaaash/p/1020841.html
Copyright © 2011-2022 走看看