程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .NET設計模式之單例模式,.net設計模式

.NET設計模式之單例模式,.net設計模式

編輯:C#入門知識

.NET設計模式之單例模式,.net設計模式


  說說我學習單例模式的原因 :

  在做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();  //顯示子窗體
        }

  單例模式還有幾種寫法,這裡就不一一些出來了。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved