生活中的單例
中國(china),位於東亞,是乙個以華夏文明為主體、中華文化為基礎,以漢族為主要民族的統一多民族國家,通用漢語。中國疆域內的各個民族統稱為中華民族,龍是中華民族的象徵。古老的中國憑藉自身的發展依舊美麗的屹立於東方民族之林,閃耀著她動人的光彩,世界上只有乙個中國,任何部分都是祖國不可分割的一部分,今天我們的設計模式就從偉大的祖國開始說起---單例模式。
詳解單例模式
單例模式是什麼?跟我們的祖國有著怎樣的關係呢?首先我們來看一下單例,從「單例」字面意思上理解為—乙個類只有乙個例項,所以單例模式也就是保證乙個類只有乙個例項的一種實現方法。官方定義:確保乙個類只有乙個例項,並提供乙個全域性訪問點。在學習的過程中,我們需要把握三個主要的關鍵點,一、某個類只能有乙個例項;二、它必須自行建立這個例項;三、它必須自行向整個系統提供這個例項。來看一下單例模式的結構圖:
實現方法
乙個類能返回物件乙個引用(永遠是同乙個)和乙個獲得該例項的方法(必須是靜態方法,通常使用getinstance這個名稱);當我們呼叫這個方法時,如果類持有的引用不為空就返回這個引用,如果類保持的引用為空就建立該類的例項並將例項的引用賦予該類保持的引用;同時我們還將該類的建構函式定義為私有方法,這樣其他處的**就無法通過呼叫該類的建構函式來例項化該類的物件,只有通過該類提供的靜態方法來得到該類的唯一例項。
**實現
第一版(基本**)
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace 單例模式基本模型
} }
class singleton
//該方法提供乙個獲得該類例項的全域性訪問點,是唯一的
public static singleton getinstance()
return instance;
} }
}
但是上述**存在一些缺點,執行緒不安全,多執行緒情況下,多個執行緒同時訪問singleton,呼叫getinstance()方法,同時判斷instance==null,得到真值,導致建立多個例項,這不符合單例模式的基本原則。那我們要怎麼辦捏,為了解決以上缺點,我們來看改進的**(一下版本的)
第二版(多執行緒時的單例)
class singleton
//該方法提供乙個獲得該類例項的全域性訪問點,是唯一的
public static singleton getinstance()
} return instance;
} }
每次呼叫getinstance()方法都需要lock,這種做法是會影響效能的,所以我們需要對這個類進行改良。
第三版(雙重鎖定)
class singleton
//該方法提供乙個獲得該類例項的全域性訪問點,是唯一的
public static singleton getinstance()
} }
return instance;
} }
上述構造方式只有在例項未被建立的時候才加鎖,避免了每次呼叫getinstance()方法都加鎖損失效能的問題。但是相對於後面的做法,她仍然有著美中不足的地方。
第四版(靜態初始化)
//sealed關鍵字防止派生
public sealed class singleton
public static singleton getinstance()
}
這種方式是在自己被載入時就將自己例項化,稱為餓漢式。由於有.netframework 進行初始化,所以我們對例項化機制的控制權較少,沒辦法和其他實現一樣實現延遲初始化。在上面三種形式中,您能夠在例項化之前使用非預設的建構函式或執行其他任務。
第五版(完全延遲載入例項化)
public sealed class singleton
public static singleton getinstance()
class nested
internal static readonly singleton instance = new singleton();
} }
寫在後面的話前三版程式設計方法,因為會面臨多執行緒訪問安全的問題,需要做雙重鎖定這樣的處理才可以保證安全,但能夠在例項化之前使用非預設的建構函式或執行其他任務,第四版(靜態初始化方式)是類一載入就例項化的物件,占用系統資源,所以到底實用哪一種方式,視具體情況而定. 簡約之美 如何實現簡約設計
在生活中,人們常常被包圍在不需要的功能中,比如某些手機,炫酷功能不勝列舉 雙攝像頭拍照,眼神翻頁,group play 好幾臺手機同步一首歌 等等。但從使用頻率和效果來說略顯雞肋。這些類似的功能可能會拖累整個產品,在使用時分散使用者注意力,使使用者無法聚焦到核心功能。尤其是使用者在干擾很多的場合,來...
配置實現 簡約之美
前幾天看到一本書 簡單之美 咱也來個簡約之美吧。終極目標是利用配置實現程式設計開發實現的功能,節省開發 測試及程式修改的麻煩,實現簡約之美。建立乙個基礎的系統架構,利用xml配置 利用結構化的xml文件配置相關的資訊 實現增刪改查及業務流程,支援開發人員方便的開發實現客戶需求,支援系統實施維護人員對...
單例模式 之 單例模式 Holder
之前我寫過 單例模式中的餓漢模式和懶漢模式 他們雖然都能實現單例模式 但是優缺點很明顯 餓漢模式 不能懶載入 類載入就會被例項化 消耗很大,在併發情況下安全性很高。懶漢模式 能實現懶載入,但是在併發情況下安全性不是很高。雖然一步一步的優化,安全性得到了保證,但是卻使用了synchronized 對效...