01 Singleton
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPatternsAgain.Creational
{
public class Singleton
{
private Singleton() { }
private static Singleton _singleton = null;
private static object obj = new object();
public static Singleton GetInstance() {
if (_singleton == null) {
lock (obj)
{
if (_singleton != null) { //double check
_singleton = new Singleton();
}
}
}
return _singleton;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPatternsAgain.Creational
{
public class Singleton
{
private Singleton() { }
private static Singleton _singleton = null;
private static object obj = new object();
public static Singleton GetInstance() {
if (_singleton == null) {
lock (obj)
{
if (_singleton != null) { //double check
_singleton = new Singleton();
}
}
}
return _singleton;
}
}
}
Client :
static void Main(string[] args)
{
Singleton sgl1 = Singleton.GetInstance();
Singleton sgl2 = Singleton.GetInstance();
bool b = object.ReferenceEquals(sgl1, sgl2);
Console.WriteLine(b.ToString());
Console.ReadKey();
}
{
Singleton sgl1 = Singleton.GetInstance();
Singleton sgl2 = Singleton.GetInstance();
bool b = object.ReferenceEquals(sgl1, sgl2);
Console.WriteLine(b.ToString());
Console.ReadKey();
}
http://msdn.microsoft.com/en-us/library/ms998558.aspx
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}

浙公网安备 33010602011771号