代码改变世界

单例模式(Singleton)

2011-09-14 21:05  yuejianjun  阅读(137)  评论(0编辑  收藏  举报

http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html 

 

懒汉式单例

    public class Singleton 
    { 
        
//定义一个私有的静态全局变量来保存该类的唯一实例 
        private static Singleton singleton;
        
//定义一个只读静态对象 
        
//且这个对象是在程序运行时创建的 
        private static readonly object syncObject = new object();
        
/// <summary> 
        
/// 构造函数必须是私有的 
        
/// 这样在外部便无法使用 new 来创建该类的实例 
        
/// </summary> 
       private Singleton() 
        {
        }
       
/// <summary> 
        
/// 定义一个全局访问点 
        
/// 设置为静态方法 
        
/// 则在类的外部便无需实例化就可以调用该方法 
        
/// </summary> 
        
/// <returns></returns> 
        public static Singleton GetInstance() 
        { 
            
//这里可以保证只实例化一次 
            
//即在第一次调用时实例化 
            
//以后调用便不会再实例化 
            
//第一重 singleton == null 
            if (singleton == null
            { 
                
lock (syncObject) 
                {
                            
//第二重 singleton == null
                    if (singleton == null
                    { 
                        singleton 
= new Singleton(); 
                    } 
                } 
            } 
            
return singleton; 
        } 
    } 
}

 

饿汉式单例类

namespace Singleton 

    
public sealed class Singleton 
    { 
        private static readonly Singleton singleton = new Singleton();

        private Singleton() 
        { 
        }

        public static Singleton GetInstance() 
        { 
            return singleton
        } 
    } 
}