C#中的单例模式

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  设计模式本身就是帮助我们解决实际开发过程中的方法,是为了降低对象之间的耦合度,解决方法有很多种,所以前人就总结了一些常用的解决方法为书籍,这些经验就称为设计模式。单例模式因为只牵涉到一个类,算是较为简单的设计模式。

单例模式

以一个例子来说明下单例模式的应用场景:

  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();
        }

Written by

说点什么

欢迎讨论

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒