設計模式之單例模式

2022-01-11 19:13:45 字數 1291 閱讀 4874

單例模式(singleton),保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

通常我們可以讓乙個全域性變數使得乙個物件被訪問,但它不能防止你例項化多個物件。乙個最好的辦法就是,讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法。

class

singleton

public

static

singleton getinstance()

return

instance;

}}

多執行緒下的單例模式

上面的寫法如果在多執行緒的情況下可能會出現同時訪問singleton類中的getinstance()方法,就會造成建立多個例項的情況。

為了解決以上問題,可以給程序一把鎖來處理。這裡用到的是lock語句,lock是確保當乙個執行緒位於**的臨界區時,另乙個執行緒不進入臨界區。如果其他執行緒檢視進入鎖定的**,則它將一直等待(即被阻止),直到該物件被釋放。

class

singleton

public

static

singleton getinstance()

}return

instance;

}

}

以上方法每次呼叫時都要lock一次,這樣就會影響效能,改進如下:

class

singleton

public

static

singleton getinstance()}}

return

instance;

}

}

這樣的話,就不會執行緒每次都加鎖,而只有在例項未被建立的時候在加鎖處理,這種做法成為雙重鎖定。

靜態初始化簡化單例模式

public

sealed

class

singleton //sealed阻止了反生派生,而派生可能會增加例項

public

static

singleton getinstance()

}

注意:instance變數標記為readonly,這意味著只能在靜態初始化期間或類建構函式中分配變數。

由於這種靜態初始化的方法是在自己被載入時就將自己例項化,所以被形象地稱為餓漢式單例類,原來的要在第一次被引用時才會將自己例項化,所以就被稱為懶漢式單例類。

以上所寫都是參考《大話設計模式》

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...