设计模式(5)——单例模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37080285/article/details/86520968

单例模式(Singleton Pattern)是 最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

public class Singleton
{
    private static Singleton singleton;
    private Singleton()
    { }

    public static Singleton GetInstance()
    {
        if (singleton == null)
            singleton = new Singleton();
        return singleton;
    }
}

上面的单例模式的实现在单线程下确实是完美的,然而在多线程的情况下会得到多个Singleton实例,因为在两个线程同时运行GetInstance方法时,此时两个线程判断(uniqueInstance ==null)这个条件时都返回真,此时两个线程就都会创建Singleton的实例,这样就违背了我们单例模式初衷了,既然上面的实现会运行多个线程执行,那我们对于多线程的解决方案自然就是使GetInstance方法在同一时间只运行一个线程运行就好了,也就是线程同步的问题了,具体的解决多线程的代码如下:

public class Singleton
{
    private static Singleton singleton;
    private static object obj1 = new object();
    private Singleton()
    { }

    public static Singleton GetInstance()
    {
        if (singleton == null)
        {
            lock (obj1)
            {
                if (singleton == null)
                {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37080285/article/details/86520968