意图;保证一个类仅用一个实例,并提供一个实例的全局访问点.
C#代码如下;
静态的初始化方式;
SIngleton在多线程中的应用;
此方法确保了仅在需要实例时才会创建仅一个实例。此外,变量被声明为 volatile,以确保只有在实例变量分配完成后才能访问实例变量。最后,此方法使用 lockObj 实例来进行锁定(而不是锁定类型本身),以避免发生死锁。
注:模式的应用不应该为了设计而设计,不能把设计模式当成技巧,不能拿来就用.在实际应用中应该'"Refactoring to Patterns'",即在已有代码的基础上经过不断改良过渡到模式.
C#代码如下;
using
System;
namespace SingletonPatterns
{
/// <summary>
/// singleton 的摘要说明.
/// 实现单件模式的3个要点:
/// 1.保存实例的私有变量
/// 2.私有化的构造函数
/// 3.访问这个实例的公共静态函数
/// </summary>
///
public class Singleton
{
private static Singleton instance; // 保存实例的私有变量
private Singleton() // 私有化的构造函数
{}
public static Singleton Instance //访问这个实例的公共静态函数(这里是以字段属性的方式提供的)
{
get
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
}
}
namespace SingletonPatterns
{
/// <summary>
/// singleton 的摘要说明.
/// 实现单件模式的3个要点:
/// 1.保存实例的私有变量
/// 2.私有化的构造函数
/// 3.访问这个实例的公共静态函数
/// </summary>
///
public class Singleton
{
private static Singleton instance; // 保存实例的私有变量
private Singleton() // 私有化的构造函数
{}
public static Singleton Instance //访问这个实例的公共静态函数(这里是以字段属性的方式提供的)
{
get
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
}
}
public
sealed
class
Singleton
{
/// <summary>
/// singleton 的摘要说明.
/// sealed 防止SIngleton被派生,从而引起
///
///
///
/// </summary>
private static readonly Singleton instance = new Singleton(); // 保存实例的私有变量
private Singleton(){} // 私有化的构造函数
public static Singleton Instance //访问这个实例的公共静态函数(这里是以字段属性的方式提供的)
{
get
{
return instance;
}
}
}
{
/// <summary>
/// singleton 的摘要说明.
/// sealed 防止SIngleton被派生,从而引起
///
///
///
/// </summary>
private static readonly Singleton instance = new Singleton(); // 保存实例的私有变量
private Singleton(){} // 私有化的构造函数
public static Singleton Instance //访问这个实例的公共静态函数(这里是以字段属性的方式提供的)
{
get
{
return instance;
}
}
}
此方法确保了仅在需要实例时才会创建仅一个实例。此外,变量被声明为 volatile,以确保只有在实例变量分配完成后才能访问实例变量。最后,此方法使用 lockObj 实例来进行锁定(而不是锁定类型本身),以避免发生死锁。
using
System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object lockObj= new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockObj)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
public sealed class Singleton
{
private static volatile Singleton instance;
private static object lockObj= new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockObj)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
注:模式的应用不应该为了设计而设计,不能把设计模式当成技巧,不能拿来就用.在实际应用中应该'"Refactoring to Patterns'",即在已有代码的基础上经过不断改良过渡到模式.