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

.net中的設計模式---單例模式

編輯:關於.NET

.net設計模式:

Net設計模式實例之單例模式( Singleton Pattern)

 一 : 單例模式的簡介:(Brief Introduction)

單例模式(Singleton Pattern),保證一個類只有一個實例,並提供一個訪問它的全局訪問點。單例模式因為Singleton封裝它的唯一實例,它就可以嚴格地控制客戶怎樣訪問它以及何時訪問它。簡單說就是單一模式:僅能有你一個人訪問;

二、解決的問題(What To Solve)

 當一個類只允許創建一個實例時,可以考慮使用單例模式。    

 三.單例模式分析(Analysis

Singleton,定義一個私有變量instance;私有構造方法Singleton()和方法GetInstance();

私有變量instance:

單例模式結構:

private static Singleton instance;

私有構造方法Singleton(),外界不能使用new關鍵字來創建此類的實例了。

private Singleton()

{

}

方法GetInstance(), 此方法是本類實例的唯一全局訪問點。

public static Singleton GetInstance()

{

    //如實例不存在,則New一個新實例,否則返回已有實例

    if (instance == null)

    {

        instance = new Singleton();

    }

    return instance;

}

單例模式代碼

1、單例模式類Singleton

public class Singleton

{

    private static Singleton instance;

 

    /// <summary>

    /// 程序運行時,創建一個靜態只讀的進程輔助對象

    /// </summary>

    private static readonly object _object = new object();

 

    /// <summary>

    /// 構造方法私有,外鍵不能通過New類實例化此類

    /// </summary>

    private Singleton()

    {

    }

    /// <summary>

    /// 此方法是本類實例的唯一全局訪問點

    /// (雙重加鎖 Double-Check Locking)

    /// </summary>

    /// <returns></returns>

    public static Singleton GetInstance()

    {

        //先判斷實例是否存在,不存在再加鎖處理

        if (instance == null)

        {

            //在同一時刻加了鎖的那部分程序只有一個線程可以進入,

            lock (_object)

            {

                //如實例不存在,則New一個新實例,否則返回已有實例

                if (instance == null)

                {

                    instance = new Singleton();

                }

            }

        }

        return instance;

    }

}

 

2、客戶端代碼

static void Main(string[] args)

{

    Singleton singleton2 = Singleton.GetInstance();

    Singleton singleton3 = Singleton.GetInstance();

    if (singleton2 ==singleton3)

    {

        Console.WriteLine("實例singleton2與實例singleton3相同!");

    }

    Console.ReadKey();

}

 

單例模式也可以不用枷鎖,例如在一個類中使用三層技術調用類:

  #region  獲取自身的單例模式:UserInfo 代表了Bll層中的類文件

        private static UserInfo instance;

        public static UserInfo GetInstance()

        {

            if (instance==null)

            {

                instance = new UserInfo ();

            }

            return instance;

        }

        #endregion

在表示層調用:

.BLL . UserInfo   bll = BLL. UserInfo.GetInstance();

 

 

 

 

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