简介:单例
一个类有且仅有一个实例
提供一个唯一实例的全局访问接口
单例模式确保某一个类只有一个实例,向整个系统提供这个实例。 也就是一个应用程序中只被实例化一次,这样可以很大程度的节省系统的开销。
下面提供几份常见的编程方式,它们的区别在于,什么时候进行实例化。
程序运行调用实例化
/// <summary>
/// sealed 不能被继承,防止派生该类
/// </summary>
public sealed class SingleBegin
{
/// <summary>
/// 程序运行调用实例化
/// </summary>
private static SingleBegin g_inst = new SingleBegin();
/// <summary>
/// private 私有,防止被人手动实例化
/// </summary>
private SingleBegin()
{
}
/// <summary>
/// 提供全局唯一单例调用接口
/// </summary>
public static SingleBegin Inst
{
get { return g_inst; }
}
public void Display()
{
Console.WriteLine("程序运行即刻实例化 SingleBegin");
}
}
在静态构造函数中实例化(这只能算半个,因为可以被多次实例化)
/// <summary>
/// sealed 不能被继承,防止派生该类
/// </summary>
public sealed class SingleBegin
{
private static SingleBegin g_inst = null;
/// <summary>
/// 会被再次实例化,所以这个算半个
/// </summary>
static SingleBegin()
{
/// <summary>
/// 使用时调用实例化
/// </summary>
g_inst = new SingleBegin();
}
/// <summary>
/// 提供全局唯一单例调用接口
/// </summary>
public static SingleBegin Inst
{
get { return g_inst; }
}
public void Display()
{
Console.WriteLine("程序运行即刻实例化 SingleBegin");
}
}
调用单例Inst时实例化(推荐用这种)
/// <summary>
/// sealed 不能被继承,防止派生该类
/// </summary>
public sealed class SingleWorld
{
private static SingleWorld g_inst = null;
/// <summary>
/// private 私有,防止被人手动实例化
/// </summary>
private SingleWorld()
{
}
/// <summary>
/// 提供全局唯一单例调用接口
/// </summary>
public static SingleWorld Inst
{
get
{
if (null == g_inst)
{
// 调用时实例化
g_inst = new SingleWorld();
}
return g_inst;
}
}
public void Display()
{
Console.WriteLine("普通单例 SingleWorld");
}
}