单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
设计模式本身就是帮助我们解决实际开发过程中的方法,是为了降低对象之间的耦合度,解决方法有很多种,所以前人就总结了一些常用的解决方法为书籍,这些经验就称为设计模式。单例模式因为只牵涉到一个类,算是较为简单的设计模式。
以一个例子来说明下单例模式的应用场景:
Form1窗体有一个Button 可以弹出Form2窗体,但是要求,只能弹出一次,除非弹出的窗体关闭,才允许再弹出。
同时:还有Form3窗体、Form4窗体、5、6……窗体和窗体1的行为一样。
设计的原则应该是:Form2被调用,相应的只弹一次的方法应该写在Form2窗体,任何人都可以调用,提高重用性。
普通单例:
public partial class Form2 : Form
{
private Form2()
{
InitializeComponent();
}
private static Form2 _form2Instance;
public static Form2 GetInstance()
{
if (_form2Instance == null || _form2Instance.IsDisposed)
{
if (_form2Instance == null || _form2Instance.IsDisposed)
{
_form2Instance = new Form2();
}
}
return _form2Instance;
}
}
解决多线程问题的单例模式:
public partial class Form2 : Form
{
private Form2()
{
InitializeComponent();
}
private static Form2 _form2Instance;
private static readonly object syn = new object();
public static Form2 GetInstance()
{
if (_form2Instance == null || _form2Instance.IsDisposed)
{
lock (syn)
{
if (_form2Instance == null || _form2Instance.IsDisposed)
{
_form2Instance = new Form2();
}
}
}
return _form2Instance;
}
}
Form1窗体只需要简单的调用:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = Form2.GetInstance();
f2.Show();
}

说点什么
欢迎讨论