【设计方式】单例模式
【设计模式】单例模式
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类成为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
实现一:普通单例模式
using System; using System.Collections.Generic; using System.Text; namespace 单例模式 { class Singleton { private static Singleton instance; private Singleton() { } public static Singleton GetInstance() { if (instance == null) instance = new Singleton(); return instance; } } class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) Console.WriteLine("两个对象是相同的实例!"); Console.Read(); } } }
实现二:多线程时的单例模式,双重锁定
using System; using System.Collections.Generic; using System.Text; namespace 双重锁定单例模式 { class Singleton { private static Singleton instance; private static readonly object syncRoot = new object(); private Singleton() { } public static Singleton GetInstance() { if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } } class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) Console.WriteLine("两个对象是相同的实例!"); Console.Read(); } } }
实现三:静态初始化单例模式
C#与公共语言运行库提供的“静态初始化”方法,不需要开发人员显式地编写线程安全代码,即可解决多线程环境下它是不安全的问题【MSDN】
这种静态初始化的方式是在自己被加载时就将自己实例化,所以被形象地称之为饿汉式单例模式。
之前的单例模式要在第一次被引用时,才会将自己实例化,称为懒汉式单例模式。
using System; using System.Collections.Generic; using System.Text; namespace 静态初试化 { public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } public static Singleton GetInstance() { return instance; } } class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) Console.WriteLine("两个对象是相同的实例!"); Console.Read(); } } }