实现Singleton的三个要点:
1.私有化构造函数
2.保存实例的静态私有变量
3.访问这个实例的公共静态方法
public class CSingleton
{
private static CSingleton mySingleton = null;
private CSingleton()
{
}
public static CSingleton Instance()
{
if (mySingleton == null)
mySingleton = new CSingleton();
return mySingleton;
}
public void Do()
{
//Do something
}
}
Client端使用:
CSingleton.Instance().Do();
例子:单窗口模式
之前:
//单击按钮事件
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
结果是每单击一次按钮弹出Form2的一次窗口,可以弹出无限次的窗口...
之后:
namespace singleton
{
public partial class Form2 : Form
{
private static Form2 _f2;//定义静态对象
private Form2()//改为私有函数
{
InitializeComponent();
}
public static Form2 getf2()//定义静态方法
{
if(_f2==null)
_f2=new Form2();
return _f2;
}
//添加窗口关闭事件,以保证窗口关闭后可以手动的释放对象,下一次点击同样生效
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
_f2 = null;//静态成员_f2有全局性
}
}
}
在Form1中的点击按钮事件中
private void button1_Click(object sender, EventArgs e)
{
Form2.getf2().Show();
}
这样得到的结果是无论如何点击按钮,产生的都只是一个对话框.