接觸程式語言之初就聽說過設計模式,但直到現在都不知道該怎樣用,適用哪些場合,只是了解少部分概念,以應付面試。
這段時間,趕專案的同時,每天抽一段時間來系統學下設計模式,總結各路技術大牛的經驗加上自己的理解,用博文的方式記錄下來。
其實,設計模式並非一種技術或者框架,更應該理解為前輩在探索路上總結的方法(思想),先從簡單的學起。
廢話說完,進入正題,走你...
單例模式【官方定義】:確保乙個類只有乙個例項,並提供乙個全域性訪問點
根據定義,很容易得到單例模式的經典**:
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的編寫...