日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#面向对象设计模式纵横谈——Singleton单件(创建型模式)

發布時間:2024/8/5 C# 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#面向对象设计模式纵横谈——Singleton单件(创建型模式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Singleton單件(創建型模式)
動機(Motivation)
在軟件系統中,經常有這樣一些特殊的類,必須保證它們在系統中只存在一個實例,才能確保它們的邏輯正確性、以及良好的效率。
如何繞過常規的構造器,提供一種機制來保證一個類只有一個實例?
這應該是類設計者的責任,而不是使用者的責任。

意圖(Intent)
保證一個類僅有一個實例,并提供一個該實例的全局訪問點。
結構(Structure)
?
單線程Singleton 模式實現

class?Singleton
????{
????????
private?static?Singleton?instance;

????????
private?Singleton()?{?}

????????
public?static?Singleton?Instance
????????{
????????????
get
????????????{
????????????????
if?(instance?==?null)
????????????????{
????????????????????instance?
=?new?Singleton();
????????????????}
????????????????
return?instance;
????????????}
????????}
????}

????
class?Test
????{
????????
public?static?void?Main()
????????{
????????????Singleton?s?
=?Singleton.Instance;
????????}
????}


單線程Singleton模式的幾個要點
Singleton模式中的實例構造器可以設置為protected以允許子類派生。
Singleton模式一般不要支持ICloneable接口,因為這可能會導致多個對象實例,與Singleton模式的初衷違背。
Singleton模式一般不要支持序列化,因為這也有可能導致多個對象實例,同樣與Singleton模式的初衷違背。
Singletom模式只考慮到了對象創建的管理,沒有考慮對象銷毀的管理。就支持垃圾回收的平臺和對象的開銷來講,我們一般沒有必要對其銷毀進行特殊的管理。
不能應對多線程環境:在多線程環境下,使用Singleton模式仍然有可能得到Singleton類的多個實例對象。

多線程Singleton 模式實現

????class?Singleton2
????{
????????
private?static?volatile?Singleton2?instance?=?null;

????????
private?static?object?lockhelper?=?new?object();

????????
private?Singleton2()?{?}

????????
public?static?Singleton2?Instance
????????{
????????????
get
????????????{
????????????????
if?(instance?==?null)
????????????????{
????????????????????
lock?(lockhelper)
????????????????????{
????????????????????????
if?(instance?==?null)
????????????????????????{
????????????????????????????instance?
=?new?Singleton2();
????????????????????????}
????????????????????}
????????????????}
????????????????
return?instance;
????????????}
????????}
????}


使用.NET類型初始化機制實現多線程Singleton 模式

class?Singleton3
????{
????????
public?static?readonly?Singleton3?Instance?=?new?Singleton3();

????????
private?Singleton3()?{?}
????}
????
class?Singleton3_1
????{
????????
public?static?readonly?Singleton3_1?Instance?=?new?Singleton3_1();

????????
private?Singleton3_1()?{?}

????????
static?Singleton3_1()
????????{
????????????Instance?
=?new?Singleton3_1();
????????}
????}


Singleton模式擴展
將一個實例擴展到n個實例,例如對象池的實現。
將new 構造器的調用轉移到其他類中,例如多個類協同工作環境中,某個局部環境只需要擁有某個類的一個實例。
理解和擴展Singleton模式的核心是“如何控制用戶使用new對一個類的實例構造器的任意調用”。

推薦參考書
? 《設計模式:可復用面向對象軟件的基礎》GoF
? 《面向對象分析與設計》Grady Booch
? 《敏捷軟件開發:原則、模式與實踐》Robert C. Martin
? 《重構:改善既有代碼的設計》Martin Fowler
? 《Refactoringto Patterns 》JoshuaKerievsky

轉載于:https://www.cnblogs.com/shanvenleo/archive/2006/02/14/330730.html

總結

以上是生活随笔為你收集整理的C#面向对象设计模式纵横谈——Singleton单件(创建型模式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。