什么是单例模式?单例模式有哪些方式实现?写个例子。

什么是单例模式?

我所理解的单例模式:整个程序中只允许有唯一的一个对象(这个类只能实例化一次)

看看我找到的解释:当一个类只能有一个对象时,往往会用到单例模式,例如,现实生活中有很多临界资源,像 打印机、处理器(单核)、皇帝、太子等等,它们都是稀有资源,只能有一个实例对象。

单例模式有哪些方式实现?

第一种最简单,但没有考虑线程安全,在多线程时可能会出问题。(懒单例)

public class Singleton
{
    private static Singleton _instance = null;

  //1.声明一个私有方法(外部无法调用)
    private Singleton(){}
    //2.声明一个公共的静态的创建上面私有方法(实现外部可以调用到声明的私有的单例方法)
    public static Singleton CreateInstance()
    {  //如果已经存在这个对象了就不要再创建新的,直接返回该对象

   //如果这个对象不存在就new一个新的呗
        if(_instance == null)

        {
            _instance = new Singleton();
        }
        return _instance;
    }
}

 

第二种考虑了线程安全

public class Singleton
{
    private volatile static Singleton _instance = null;
    private static readonly object lockHelper = new object();
    private Singleton(){}
    public static Singleton CreateInstance()
    {
        if(_instance == null)
        {
            lock(lockHelper)
            {
                if(_instance == null)
                     _instance = new Singleton();
            }
        }
        return _instance;
    }
}

 

class MyClass
    {
        private static MyClass my = new MyClass();
        private MyClass() { }

        public static MyClass GetMyClass()
        {
            return my;
        }
    }

 



第三种可能是C#这样的高级语言特有的

public class Singleton
{

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

 

  

写个例子。

实现方式没有仔细研究,先记个懒单例吧。抽空看看大话设计模式。。。

好吧,例子已经在上面了。。。

 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件 664507902@qq.com联系,我将以第一时间删除相关内容。

posted @ 2015-09-15 10:56  木头园—OOIP  阅读(7703)  评论(1编辑  收藏  举报