码迷,mamicode.com
首页 > Web开发 > 详细

.NET设计模式之单例模式

时间:2015-07-19 23:36:01      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

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

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

  单例模式总结:

  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();  //显示子窗体
        }

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

 

.NET设计模式之单例模式

标签:

原文地址:http://www.cnblogs.com/handsome1008/p/4660005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!