最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 設(shè)計模式之單例模式歸納總結(jié)

 更新時間:2017年04月21日 11:38:14   投稿:wbb  
這篇文章主要介紹了C#設(shè)計模式之單例模式實例講解,本文講解了單例模式的定義、單例模式的優(yōu)缺點,需要的朋友可以參考下

優(yōu)缺點

 優(yōu)點:

一、實例控制

單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。

二、靈活性

因為類控制了實例化過程,所以類可以靈活更改實例化過程。

缺點:

一、開銷

雖然數(shù)量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態(tài)初始化解決此問題。

二、可能的開發(fā)混淆

使用單例對象(尤其在類庫中定義的對象)時,開發(fā)人員必須記住自己不能使用new關(guān)鍵字實例化對象。因為可能無法訪問庫源代碼,因此應(yīng)用程序開發(fā)人員可能會意外發(fā)現(xiàn)自己無法直接實例化此類。

三、對象生存期

不能解決刪除單個對象的問題。在提供內(nèi)存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠?qū)е聦嵗蝗∠峙洌驗樗瑢υ搶嵗乃接幸?。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導(dǎo)致單例類中出現(xiàn)懸浮引用 

C#

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點

實現(xiàn)要點

Singleton模式是限制而不是改進類的創(chuàng)建。

Singleton類中的實例構(gòu)造器可以設(shè)置為Protected以允許子類派生。

Singleton模式一般不要支持Icloneable接口,因為這可能導(dǎo)致多個對象實例,與Singleton模式的初衷違背。

Singleton模式一般不要支持序列化,這也有可能導(dǎo)致多個對象實例,這也與Singleton模式的初衷違背。

Singleton只考慮了對象創(chuàng)建的管理,沒有考慮到銷毀的管理,就支持垃圾回收的平臺和對象的開銷來講,我們一般沒必要對其銷毀進行特殊的管理。

理解和擴展Singleton模式的核心是"如何控制用戶使用new對一個類的構(gòu)造器的任意調(diào)用"。

可以很簡單的修改一個Singleton,使它有少數(shù)幾個實例,這樣做是允許的而且是有意義的。

優(yōu)點

實例控制:Singleton 會阻止其他對象實例化其自己的 Singleton 對象的副本,從而確保所有對象都訪問唯一實例

靈活性:因為類控制了實例化過程,所以類可以更加靈活修改實例化過程

缺點

開銷:雖然數(shù)量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷??梢酝ㄟ^使用靜態(tài)初始化解決此問題,上面的五種實現(xiàn)方式中已經(jīng)說過了。

可能的開發(fā)混淆:使用 singleton 對象(尤其在類庫中定義的對象)時,開發(fā)人員必須記住自己不能使用 new 關(guān)鍵字實例化對象。因為可能無法訪問庫源代碼,因此應(yīng)用程序開發(fā)人員可能會意外發(fā)現(xiàn)自己無法直接實例化此類。

對象的生存期:Singleton 不能解決刪除單個對象的問題。在提供內(nèi)存管理的語言中(例如基于 .NET Framework 的語言),只有 Singleton 類能夠?qū)е聦嵗蝗∠峙?,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除

對象實例,但這樣會導(dǎo)致 Singleton 類中出現(xiàn)懸浮引用。

適用性

當(dāng)類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。

當(dāng)這個唯一實例應(yīng)該是通過子類化可擴展的,并且客戶應(yīng)該無需更改代碼就能使用一個擴展的實例時。

代碼示例:

雙重鎖機制

namespace Singleton
{
public class Singleton
{
//定義一個私有的靜態(tài)全局變量來保存該類的唯一實例
private static Singleton singleton;
//定義一個只讀靜態(tài)對象
//且這個對象是在程序運行時創(chuàng)建的
private static readonly object syncObject = new object();
///
/// 構(gòu)造函數(shù)必須是私有的
/// 這樣在外部便無法使用 new 來創(chuàng)建該類的實例
///
private Singleton()
{}
///
/// 定義一個全局訪問點
/// 設(shè)置為靜態(tài)方法
/// 則在類的外部便無需實例化就可以調(diào)用該方法
///
///
public static Singleton GetInstance()
{
//這里可以保證只實例化一次
//即在第一次調(diào)用時實例化
//以后調(diào)用便不會再實例化
//第一重 singleton == null
if (singleton == null)
{
lock (syncObject)
{
//第二重 singleton == null
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
}

希望本文對您有所幫助

相關(guān)文章

  • C#面向?qū)ο笤O(shè)計原則之單一職責(zé)原則

    C#面向?qū)ο笤O(shè)計原則之單一職責(zé)原則

    這篇文章介紹了C#面向?qū)ο笤O(shè)計原則之單一職責(zé)原則,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • C#使用Dns類實現(xiàn)查詢主機名對應(yīng)IP地址

    C#使用Dns類實現(xiàn)查詢主機名對應(yīng)IP地址

    C#中的Dns類能夠與默認(rèn)的DNS服務(wù)器進行通信,以檢索IP地址,這篇文章主要介紹了C#如何使用Dns類解析出主機對應(yīng)的IP地址信息,需要的可以參考下
    2024-02-02
  • C#從foreach語句中枚舉元素看數(shù)組詳解

    C#從foreach語句中枚舉元素看數(shù)組詳解

    這篇文章主要給大家介紹了關(guān)于C#從foreach語句中枚舉元素看數(shù)組的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • C#處理Access中事務(wù)的方法

    C#處理Access中事務(wù)的方法

    這篇文章主要介紹了C#處理Access中事務(wù)的方法,涉及C#中事物的實現(xiàn)及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Qt讀取本地系統(tǒng)時間的幾種方式小結(jié)

    Qt讀取本地系統(tǒng)時間的幾種方式小結(jié)

    這篇文章主要介紹了Qt讀取本地系統(tǒng)時間的幾種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • C#中Invoke和BeginInvoke區(qū)別小結(jié)

    C#中Invoke和BeginInvoke區(qū)別小結(jié)

    有時候,我們不得不跨線程調(diào)用主界面的控件來進行操作,所以為了方便的解決問題,.net為我們提供了Invoke?與beginInvoke,那么Invoke和BeginInvoke區(qū)別在哪,本文就來詳細(xì)的介紹一下
    2023-08-08
  • C#中Thread.CurrentThread的用法小結(jié)

    C#中Thread.CurrentThread的用法小結(jié)

    本文主要介紹了C#中Thread.CurrentThread的用法小結(jié),通過Thread.CurrentThread可以訪問和修改當(dāng)前線程的各種屬性和方法,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • C#面向?qū)ο筇卣鞯木唧w實現(xiàn)及作用詳解

    C#面向?qū)ο筇卣鞯木唧w實現(xiàn)及作用詳解

    所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實現(xiàn)的功能或者框架,要根據(jù)實際情況
    2013-10-10
  • C#調(diào)用Python程序傳參數(shù)獲得返回值

    C#調(diào)用Python程序傳參數(shù)獲得返回值

    C# 調(diào)用 Python 程序有多種方式,本文主要介紹了4種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • des加密解密源碼 C# key值問題分析

    des加密解密源碼 C# key值問題分析

    本文主要介紹了des加密解密源碼,C# key值問題,大家參考使用吧
    2014-01-01

最新評論

大姚县| 乌苏市| 房产| 安吉县| 炉霍县| 吉林市| 田阳县| 阿巴嘎旗| 中卫市| 平度市| 永春县| 莲花县| 白朗县| 墨玉县| 丹寨县| 梅州市| 安吉县| 马边| 酉阳| 孟州市| 杭锦旗| 鹤峰县| 南安市| 团风县| 宁远县| 汶川县| 南溪县| 临沧市| 南郑县| 赤城县| 寿阳县| 平遥县| 黄浦区| 芜湖县| 博白县| 射洪县| 元江| 新沂市| 旌德县| 长丰县| 句容市|