zoukankan      html  css  js  c++  java
  • 项目中的单例模式

    在开发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();    //激活该对象

     

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

  • 相关阅读:
    方法
    顺序结构 基本语句
    包,Doc
    运算符
    变量
    类型转换
    day7——JAVA数组
    day6——java方法
    day5——java流程控制
    day4
  • 原文地址:https://www.cnblogs.com/saper/p/1387902.html
Copyright © 2011-2022 走看看