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

歡迎來(lái)到入門(mén)教程網(wǎng)!

C#教程

當(dāng)前位置:主頁(yè) > 軟件編程 > C#教程 >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

優(yōu)缺點(diǎn)

 優(yōu)點(diǎn):

一、實(shí)例控制

單例模式會(huì)阻止其他對(duì)象實(shí)例化其自己的單例對(duì)象的副本,從而確保所有對(duì)象都訪問(wèn)唯一實(shí)例。

二、靈活性

因?yàn)轭惪刂屏藢?shí)例化過(guò)程,所以類可以靈活更改實(shí)例化過(guò)程。

缺點(diǎn):

一、開(kāi)銷

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

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

使用單例對(duì)象(尤其在類庫(kù)中定義的對(duì)象)時(shí),開(kāi)發(fā)人員必須記住自己不能使用new關(guān)鍵字實(shí)例化對(duì)象。因?yàn)榭赡軣o(wú)法訪問(wèn)庫(kù)源代碼,因此應(yīng)用程序開(kāi)發(fā)人員可能會(huì)意外發(fā)現(xiàn)自己無(wú)法直接實(shí)例化此類。

三、對(duì)象生存期

不能解決刪除單個(gè)對(duì)象的問(wèn)題。在提供內(nèi)存管理的語(yǔ)言中(例如基于.NET Framework的語(yǔ)言),只有單例類能夠?qū)е聦?shí)例被取消分配,因?yàn)樗瑢?duì)該實(shí)例的私有引用。在某些語(yǔ)言中(如 C++),其他類可以刪除對(duì)象實(shí)例,但這樣會(huì)導(dǎo)致單例類中出現(xiàn)懸浮引用 

C#

保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)

實(shí)現(xiàn)要點(diǎn)

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

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

Singleton模式一般不要支持Icloneable接口,因?yàn)檫@可能導(dǎo)致多個(gè)對(duì)象實(shí)例,與Singleton模式的初衷違背。

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

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

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

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

優(yōu)點(diǎn)

實(shí)例控制:Singleton 會(huì)阻止其他對(duì)象實(shí)例化其自己的 Singleton 對(duì)象的副本,從而確保所有對(duì)象都訪問(wèn)唯一實(shí)例

靈活性:因?yàn)轭惪刂屏藢?shí)例化過(guò)程,所以類可以更加靈活修改實(shí)例化過(guò)程

缺點(diǎn)

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

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

對(duì)象的生存期:Singleton 不能解決刪除單個(gè)對(duì)象的問(wèn)題。在提供內(nèi)存管理的語(yǔ)言中(例如基于 .NET Framework 的語(yǔ)言),只有 Singleton 類能夠?qū)е聦?shí)例被取消分配,因?yàn)樗瑢?duì)該實(shí)例的私有引用。在某些語(yǔ)言中(如 C++),其他類可以刪除

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

適用性

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

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

代碼示例:

雙重鎖機(jī)制

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

希望本文對(duì)您有所幫助

上一篇:C# winform點(diǎn)擊生成二維碼實(shí)例代碼

欄    目:C#教程

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

本文標(biāo)題:C# 設(shè)計(jì)模式之單例模式歸納總結(jié)

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

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

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

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

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