欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

C# 設計模式之單例模式歸納總結

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

優(yōu)缺點

 優(yōu)點:

一、實例控制

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

二、靈活性

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

缺點:

一、開銷

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

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

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

三、對象生存期

不能解決刪除單個對象的問題。在提供內(nèi)存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導致單例類中出現(xiàn)懸浮引用 

C#

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

實現(xiàn)要點

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

Singleton類中的實例構造器可以設置為Protected以允許子類派生。

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

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

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

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

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

優(yōu)點

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

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

缺點

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

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

對象的生存期:Singleton 不能解決刪除單個對象的問題。在提供內(nèi)存管理的語言中(例如基于 .NET Framework 的語言),只有 Singleton 類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除

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

適用性

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

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

代碼示例:

雙重鎖機制

namespace Singleton
{
public class Singleton
{
//定義一個私有的靜態(tài)全局變量來保存該類的唯一實例
private static Singleton singleton;
//定義一個只讀靜態(tài)對象
//且這個對象是在程序運行時創(chuàng)建的
private static readonly object syncObject = new object();
///
/// 構造函數(shù)必須是私有的
/// 這樣在外部便無法使用 new 來創(chuàng)建該類的實例
///
private Singleton()
{}
///
/// 定義一個全局訪問點
/// 設置為靜態(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;
}
}
}

希望本文對您有所幫助

上一篇:C# winform點擊生成二維碼實例代碼

欄    目:C#教程

下一篇:C#文件下載實例代碼(適用于各個瀏覽器)

本文標題:C# 設計模式之單例模式歸納總結

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5776.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有