在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑的正确性。
而单件模式,可以保证一个类有且只有一个实例并提供一个访问它的全局访问点,构建单件模式方法比较多,比较流行的做法是,在类中嵌套一个静态变量,并在第一个创建该实例的时候设置该变量,进入类构造函数时候,再检验该变量。
以下事例:
//
单件模式
public class Spooler
{
private static bool instance_flag=false;//由该变量决定创建实例是否成功
private string name;
private Spooler(string filename)
{
name=filename;
}
public static Spooler getSpooler(string filename)
{
if (!instance_flag)
{
instance_flag=true;
return new Spooler(filename);
}
else
{
return null;
}
}
public string getName()
{
return name;
}
}
按钮事件:
private
void Button7_Click(object sender, System.EventArgs e)
{
// Spooler s1=new Spooler(txWord.Text);
Spooler s1=Spooler.getSpooler(txWord.Text);
if (s1!=null)
{
lbResult1.Text="S1
创建成功,其name为"+s1.getName()+"<BR>";
}
else
{
lbResult1.Text="S1
创建不成功,违反单件模式创建原则<BR>";
}
Spooler S2=Spooler.getSpooler(txWord.Text);
if (S2!=null)
{
lbResult1.Text+="S2
创建成功,其name为"+s1.getName()+"<BR>";
}
else
{
lbResult1.Text+="S2
创建不成功,违反单件模式创建原则<BR>";
}
}
结果显示: