标签:
说说我学习单例模式的原因 :
在做MDI WinForm程序的时候,需要每个子窗体只能打开一次(同时只能有一个子窗体实例),之前网上看到好多种解决方案,各种尝试都解决不了我遇到的问题,相信很多人跟我一样,现在可以告诉大家,单利模式可以完美解决。
单例模式总结:
以下是实现过程:
我的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(); //显示子窗体 }
单例模式还有几种写法,这里就不一一些出来了。
标签:
原文地址:http://www.cnblogs.com/handsome1008/p/4660005.html