首页 > 学院 > 开发设计 > 正文

.NET设计模式之单例模式

2019-11-17 02:14:48
字体:
来源:转载
供稿:网友

.NET设计模式之单例模式

  说说我学习单例模式的原因:

  在做MDIWinForm程序的时候,需要每个子窗体只能打开一次(同时只能有一个子窗体实例),之前网上看到好多种解决方案,各种尝试都解决不了我遇到的问题,相信很多人跟我一样,现在可以告诉大家,单利模式可以完美解决。

  单例模式总结:

  1. 目标:一个类只能有一个实例存在
  2. 类的实例通过自身来创建
  3. 由于类实例只能有一个,所以类的构造函数必须是PRivate的
  4. 类内部必须有一个逻辑单元来返回给外部一个类实例(对象)

  以下是实现过程:

  我的MDI程序子窗体(用户管理--UserMgrForm)  

        private static UserMgrForm UsrForm;  //子窗体实例        private static readonly Object asyncRoot = new Object();  //只读的object对象     //构造函数        private UserMgrForm()        {            InitializeComponent();        }     //子窗体创建实例的方法(必须是静态,因为不允许用类实例调用实例方法,那样就没意义了)        public static UserMgrForm GetInstance()        {            if (UsrForm == null)            {                lock (asyncRoot)  //这个是用在多线程程序下的双锁                {            //判断子窗体实例是否为null                    if (UsrForm == null)                    {                        UsrForm = new UserMgrForm();                    }                }            }            return UsrForm;        }          //修改子窗体UserMgrForm.Designer.cs文件中的代码为     protected override void Dispose(bool disposing)        {            if (disposing && (components != null))            {                components.Dispose();            }       //base.Dispose(disposing);  //原来的代码            base.Hide();        }     //那么在主窗体中如何实现打开子窗体呢:     //用户管理        private void miEmpMgr_Click(object sender, EventArgs e)        {            SysMenu.UserMgrForm.GetInstance().Mdiparent = this;            SetUI.SetFormTitle(SysMenu.UserMgrForm.GetInstance(), "用户管理");  //窗体标题            SetUI.SetMdiChildSize(SysMenu.UserMgrForm.GetInstance());  //设置子窗体初始尺寸            SetUI.SetMdiFormState(SysMenu.UserMgrForm.GetInstance());  //设置子窗体状态            SysMenu.UserMgrForm.GetInstance().Show();  //显示子窗体        }

  单例模式还有几种写法,这里就不一一些出来了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表