Singleton的设计--经典

转自:http://www.techmango.com/blog/article/DotNet/Thread_Safe_Singleton_Instance.htm
许多同志都会采用一个double check的方式来创建一个Singleton:

public class Singleton
{
    protected Singleton() { }
    private static volatile Singleton instance = null;
    /// Lazy方式创建唯一实例的过程
    public static Singleton Instance()
    {
        if (instance == null)         // 外层if
            lock (typeof(Singleton))      // 多线程中共享资源同步
                if (instance == null) // 内层if
                    instance = new Singleton();
        return instance;
    }
}
 

这应该是比较经典的线程安全的Singleton创建方式,但是还是一个更加简单也很Cool的线程安全的Singleton:

class Singleton
{
    private Singleton() { }
    public static readonly Singleton Instance = new Singleton();
}
 

  它省去了上面示例中那个laze构造过程,由于Instance是类的公共静态成员,因此相当于它会在类第一次被用到的时候被构造,同样的原因也就可以省去把它放在静态构造函数里的过程。


这里实例构造函数被彻底定义为私有的,所以客户程序和子类无法额外构造新的实例,所有的访问通过公共静态成员Instance获得唯一实例的引用,符合Singleton的设计意图。

posted on 2011-03-09 12:36 MrRightLeft 阅读(254) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜