单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
设计模式本身就是帮助我们解决实际开发过程中的方法,是为了降低对象之间的耦合度,解决方法有很多种,所以前人就总结了一些常用的解决方法为书籍,这些经验就称为设计模式。单例模式因为只牵涉到一个类,算是较为简单的设计模式。
以一个例子来说明下单例模式的应用场景:
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(); }
说点什么
欢迎讨论