Singleton

来源:互联网 发布:钛备份还原数据冲突 编辑:程序博客网 时间:2024/05/01 08:17

曾经在Javascript中,为了实现在多页面存在的全局变量,实现过 Singleton 模式,现在看看C#的实现! 呵呵! 其实充分验证了一句话,设计模式无关语言,或者说设计模式可以应用到生活中的任何方面!

/*
 单件模式的练习 Singleton
 共有三种实现方式
 Singleton1 为单线程实现方式
 Singleton2 为多线程实现方式
 Singleton3 为MSDN上的一种方式,同时适合单线程和多线程环境!
*/

using System;
/*
//单线程 GoF 4 的传统方法
public class Singleton1
{
 private static Singleton1 instance = null;
 private Singleton1(){}
 public static Singleton1 Instance
 {
  get
  {
   if (instance == null)
   {
    instance = new Singleton1();
   }
   return instance;
  }
 }
}

//多线程 Gof 4 的传统方式
public class Singleton2
{
 //防止编译器对代码进行微调,如果此行被调整位置,将有
 //可能在多线程的环境下,多次被实例化,这将违背单件模
 //式的原则!
 private static volatile Singleton2 instance = null;

 private static object lockHelper = new Object();
 private Singleton2(){}
 public static Singleton2 Instance
 {
  get
  {
   if (instance == null)
   {
    lock (lockHelper)
    {
     if (instance == null)
     {
      instance = new Singleton2();
     }
    }
   }
   return instance;
  }
 }
}
*/
//MSDN上的方式
public class Singleton3
{
 public static readonly Singleton3 instance = new Singleton3();
 private Singleton3(){}
}
/*
//MSDN上的方法的细分
//比较容易理解
public class Singleton4
{
 public static readonly Singleton4 instance;
 static Singleton4()
 {
  instance = new Singleton4();
 }
 private Singleton4(){}
}

public class RunTest
{
 static void Main()
 {
  
 }
}
*/

原创粉丝点击