单件模式(Singleton)的延迟初始化(Lazy Initialization)和(Early initialization)

单件模式(Singleton)核心是:

1、静态方法、静态成员的使用。
使用静态成员变量保存“全局”的实例,确保了唯一性,使用静态的成员方法instance() 代替 new关键字来获取该类的实例,达到全局可见的效果。

2、将构造函数设置成为private,
如果使用new关键字创建类的实例,则编译报错,以防编程时候笔误。

对于单件的初始化.可以有(Lazy Initialization)和(Early initialization)两种方法。

Early initialization 就类似下面C#的伪代码:
using System;
namespace csPattern.Singleton
{
   public class Singleton
   {
 static Singleton uniSingleton = new Singleton();
 private Singleton() {}
 static public Singleton instance()
 {
   return uniSingleton;
 }
   }
}

Lazy Initialization 就类似下面C# 的伪代码:
using System;
namespace csPattern.Singleton
{
   public class Singleton
   {
 static Singleton uniSingleton;
 private Singleton() {}
 static public Singleton instance()
 {
  if (null == uniSingleton)
  {
     uniSingleton = new Singleton _lazy();
  }
  return uniSingleton;
 }
   }
}

Lazy Initialization 需要自己手工编码处理多线程并发的时候,以确保多线程并发时候真正的单件。

《Singleton设计模式的C#实现》这篇文章对晚期捆绑提供了三个方法。
这篇文章可以看:

http://kangtr.cnblogs.com/articles/254613.html


这三个方法是:
 1、使用 [MethodImpl(MethodImplOptions.Synchronized)]
 2、lock(myObject)
 3、使用 Mutex  类的 WaitOne 方法。

有关这三个方法更具体的看以上给的文章连接。

posted @ 2005-10-14 10:39  么么茶.NET  阅读(1094)  评论(1)    收藏  举报