1.单例模式

1.定义

Ensure a class has only one instance,and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

2.模式讲解

(1)类图

(2)单例模式通用代码

 1 public class Singleton
 2 {
 3     private static Singleton singleton = new Singleton();
 4 
 5     private Singleton()
 6     {}
 7 
 8     public static Singleton GetSingleton()
 9     {
10         return singleton;
11     }
12 }

3.单例模式的多种实现方式

(1)简单的实现

    public sealed class Singleton
    {
        private static Singleton _instance = null;

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
                return _instance;
            }
        }
    }

缺点:这种方式的实现对于线程来说并不是安全的,因为在多线程的环境下有可能得到Singleton类的多个实例。

优点:直到对象要求产生一个实例才执行实例化;这种方法称为“惰性实例化”。惰性实例化避免了在应用程序启动时实例化不必要的 singleton

(2)安全的线程

    public sealed class Singleton
    {
        private static Singleton _instance = null;

        private static readonly Object O = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                lock (O)
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton();
                    }
                    return _instance;
                }
            }
        }
    }

优点:这种方式的实现对于线程来说是安全的。我们首先创建了一个进程辅助对象,线程在进入时先对辅助对象加锁然后再检测对象是否被创建,这样可以确保只有一个实例被创建,因为在同一个时刻加了锁的那部分程序只有一个线程可以进入。这种情况下,对象实例由最先进入的那个线程创建,后来的线程在进入时(instence == null)为假,不会再去创建对象实例了。

缺点:这种实现方式增加了额外的开销,损失了性能。

(3)静态初始化,饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)

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

        private Singleton()
        { }

        public static Singleton GetSingleton()
        {
            return singleton;
        }
    }
原文地址:https://www.cnblogs.com/JustYong/p/4596536.html