一步一步學設計模式 1 單例模式

2021-07-04 12:06:34 字數 1523 閱讀 7880

接觸程式語言之初就聽說過設計模式,但直到現在都不知道該怎樣用,適用哪些場合,只是了解少部分概念,以應付面試。

這段時間,趕專案的同時,每天抽一段時間來系統學下設計模式,總結各路技術大牛的經驗加上自己的理解,用博文的方式記錄下來。

其實,設計模式並非一種技術或者框架,更應該理解為前輩在探索路上總結的方法(思想),先從簡單的學起。

廢話說完,進入正題,走你...

單例模式【官方定義】:確保乙個類只有乙個例項,並提供乙個全域性訪問點

根據定義,很容易得到單例模式的經典**:

public sealed class singleton

//私有變數儲存類的例項

private static singleton instance;

//全域性訪問點

//執行緒不安全,多個執行緒同時訪問getinstance會衝突

public static singleton getinstance()

return instance;

}}

如果多個執行緒同時獲取物件,理想狀態下每個執行緒都會建立乙個例項,就違背單例模式的初衷了,

改進如下,加乙個控制線程的鎖標識:

public sealed class singleton

//私有變數儲存類的例項

//private static singleton instance;

//2016-1-25更新:為了保證多執行緒的情況下,每次讀取instance都從記憶體而不是從cache中讀取。換句話說,保證變數是最新的,不受其他子執行緒影響,應該這樣定義,使用volatile關鍵字

private static volatile singleton instance; //定義乙個標識,確保執行緒同步

private static readonly object lockhelper = new object(); //全域性訪問點

//執行緒不安全,多個執行緒同時訪問getinstance會衝突

public static singleton getinstance()

} return instance;

} }

在高階語言裡,可以歸納為:

public class singleton

public static readonly singleton instance = new singleton();

}

接下來簡單說說單例模式的適用範圍(個人理解),

乙個專案中需要對同乙個大類多次例項化並銷毀,比如作業系統的任務管理器,只能開啟乙個。

資源共享的情況下,避免由於資源操作時導致的效能或損耗等。如上述中的日誌檔案,應用配置

控制資源的情況下,方便資源之間的互相通訊。如執行緒池等

這樣做的好處就是不用為每次例項化分配記憶體空間,某種程度上節省了開銷。

一步一步學cscope

告之 1,我不喜歡寫部落格 因為感覺太浪費時間 2,部落格能記住自己某階段學過的東西,而這些東西可能會很快的忘卻 所以我以後要學著在部落格上浪費時間 前言 本文件記錄了我今天 2007 11 9 下午學習cscope的一點收穫,特收錄部落格以作分享。在學習cscope過程中查閱了大量的文件,但發現適...

一步一步學Linq to sql

一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...

一步一步學RenderMonkey

rendermonkey的基本使用方法 用rendermonkey 進行shader開發 一 用rendermonkey 進行shader開發 二 rendermonkey製作photoshop特效 前言 rendermonkey作為shader開發利器而為人所熟知,我們可以專心於shader的編寫...