設計模式—單件模式(Singleton)
阿新 • • 發佈:2018-12-11
單件模式是最簡單的建立型設計模式,它通過合理的許可權控制使得某一個類只能擁有一個例項。使用單件模式注意三個重點部分:私有或保護的構造方法(防止例項被隨意建立),類內靜態的例項(也是唯一的例項),類內靜態的全域性訪問點(用於獲得該唯一例項)。為什麼唯一例項和全域性訪問點要用靜態的呢?很明顯,如果使用非靜態的全域性訪問點,要呼叫該方法首先要建立一個例項,然而在類外例項是無法被建立的(受到構造方法的限制),所以要使用靜態的方法來提供例項的訪問。既然方法為靜態,那麼被靜態方法使用的唯一例項也就要為靜態了。
下面以一個蜂巢中唯一的蜂后為例子提供程式碼描述。
class QueenBee { private QueenBee() { /* do something */ } private static queen; public static QueenBee getQueen() { if(queen == null) { //position 1 queen = new QueenBee(); } return queen; } }
這裡採用了懶載入的單件模式,只有當確實要使用queen時,它的例項才被建立。其實這裡的單件模式是執行緒不安全的。假設執行緒1執行到position 1時切換到執行緒2執行,執行緒2也能夠滿足queen == null的判斷進入queen的建立部分,這樣兩個執行緒建立了兩個蜂后;可以通過採用其它形式的單件模式解決這個問題,具體參閱:點選這裡。