模式3:单例模式--C#语言描述
“单例模式”,通过名字我们不难看出该模式指的是一个类只能被实例化一次,并且必须由自己来完成实例化的操作,整个系统都使用这个实例。
单例模式是一个简单而且实用的模式,我在我的系统中已经多处使用的该模式,其实我个人觉得多例模式比单例模式更实用一些。这两种模式的实现思想基本是一样的。
为什么要使用单例模式,《Java与模式》一书中举的例子非常好,我在这里就不再举别的例子了,书上说:电脑可以配备多个网卡,但必须只能有一个网卡管理程序管理这些网卡,以免造成混乱。一台计算机可以配备多台打印机,但只能有一个Print Spooler,以免多个打印作业同时输出到打印机上。
通过上面的两个例子,我想大家不难想到单例模式是什么样的模式了吧。
我们看看下面运用单例模式的例子:
SingletonPattern.cs
using System;
![]()
public class SingletonPattern
{
int currentNumber;
![]()
private static SingletonPattern sp = new SingletonPattern();
![]()
private SingletonPattern()
{
}
![]()
public static SingletonPattern getInstance()
{
return sp;
}
![]()
public int CurrentNumber
{
get
{
return currentNumber;
}
set
{
currentNumber = value;
}
}
}
//==========================
TestA.cs
using System;
![]()
public class TestA
{
public static void Main()
{
SingletonPattern sp1 = SingletonPattern.getInstance();
Console.WriteLine("" + sp1.CurrentNumber);
sp1.currentNumber = 5;
Console.WriteLine("" + sp1.CurrentNumber);
![]()
SingletonPattern sp2 = SingletonPattern.getInstance();
Console.WriteLine("" + sp2.CurrentNumber);
![]()
}
}
SingletonPattern.cs
using System;
public class SingletonPattern
{
int currentNumber;
private static SingletonPattern sp = new SingletonPattern();
private SingletonPattern()
{
}
public static SingletonPattern getInstance()
{
return sp;
}
public int CurrentNumber
{
get
{
return currentNumber;
}
set
{
currentNumber = value;
}
}
}
//==========================
TestA.cs
using System;
public class TestA
{
public static void Main()
{
SingletonPattern sp1 = SingletonPattern.getInstance();
Console.WriteLine("" + sp1.CurrentNumber);
sp1.currentNumber = 5;
Console.WriteLine("" + sp1.CurrentNumber);
SingletonPattern sp2 = SingletonPattern.getInstance();
Console.WriteLine("" + sp2.CurrentNumber);
}
} 程序输出的结果是0 5 5,可见第二个得到的对象就是前面生成的对象。
我们再把单例模式总结一下:如果一个类是单例类,那么他必须由自己来实例化,这一点我们可以通过将构造函数的访问级别设为私有的来处理。一个单例类必须只能实例化一次,我们在类的内部提供一个实例,把构造函数私有化,这样就保证了只有一个实例。它必须可以为整个系统提供这个实例,我们在例子中看到了,通过提供一个静态的方法,将单例类自己生成的实例提供给整个系统。
关于单例类的讨论还有很多,比如有状态和无状态等等,我们在以后讨论
posted on 2005-06-14 15:24 chance_win 阅读(410) 评论(0) 收藏 举报


浙公网安备 33010602011771号