项目中的单例模式

在开发C#项目的时候往往会遇到这样的场景:整个系统都最小化到托盘,然后用户想要双击托盘显示出主界面,而此时你需要在显示主界面的时候弹出一个验证用户信息的对话框,要求用户输入密码等来验证。这样的场景就意味着你必须对密码验证框进行单一实例,否者你双击一次托盘就显示一次验证框,到最后就会产生不必要的麻烦

单一模式在《深入浅出设计模式》一书里面算是最最简便的一个模式了,主要是为了防止系统多次实例化窗体。要实现单一模式很简单,有很多种方法:

1、只要把该类的构造函数设置为私有,而且在该类中实例一个该类对象,并在类中做一个静态返回该对象就可以了~~不过这里要注意该对象是否为null或者已经IsDisposed

(例子来自《大话设计模式》中的单例模式)

namespace 单例模式

{

public partial class FormToolbox : Form

{

    private static FormToolbox ftb = null;

    private FormToolbox()        //构造函数声明为私有,所以不能在类外实例对象

{

   InitializeComponent();

    }

    public static FormToolbox GetInstance()  //静态方法,返回类对象

    {

        if (ftb == null || ftb.IsDisposed)  //判断是否已经引用了对象或者已经清理掉

        {

            ftb = new FormToolbox();

            ftb.MdiParent=Form1.ActiveForm;    //声明该窗体是主窗体的MDI子窗体

        }

        return ftb;    //返回该对象

    }

}

}

1)  主窗体:

namespace 单例模式

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            this.IsMdiContainer = true;     //声明该窗体为MDI主窗体

        }

        private void ToolStripMenuItemToolbox_Click(object sender, EventArgs e)

        {

          FormToolbox.GetInstance().Show();  //通过调用静态方法返回对象,然后Show()

        }

        private void toolStripButton1_Click(object sender, EventArgs e)

        {

            FormToolbox.GetInstance().Show();

        }

}

}

 

2:不对该类做任何的处理,在类外其他地方如果要做单一处理的话,只需要声明一个静态且私有的类对象,然后判断它是否null或者IsDisposed就可以了~如下:

 

private static FormToolbox  ftb;  //声明静态的私有类对象

 

if (ftb == null || ftb.IsDisposed)   //判断是否已经引用了对象或者已经清理掉

    {

       ftb = new FormToolbox();

       ftb.ShowDialog();

    }

    else if (!ftb.Visible)

    {

        ftb.ShowDialog();

    }

ftb.Activate();    //激活该对象

 

这样在你双击托盘的时候就会弹出数据密码的验证框,假如你再双击托盘则相当于激活了该验证框

原文地址:https://www.cnblogs.com/saper/p/1387902.html