設計模式之單例模式

2021-07-24 05:04:21 字數 1328 閱讀 1307

一般情況下乙個類能否做成單例,就在於,這個類在整個應用中,同一時刻有且只有一種狀態。

第一種單例模式的構造方式。

public

class singleton

//給出乙個公共的靜態方法返回乙個單一的例項

public

static singleton getinstance()

return singleton;

}}

當然上面給出的**是在不考慮併發訪問的情況下的一種單例模式,這種方式通過幾個地方來限制了我們取到的例項是唯一的。

考慮併發時,我們最先想到的是直接將整個方法同步。

public

class synchronizedsingleton

//給出乙個公共的靜態方法返回乙個單一的例項

public synchronized static synchronizedsingleton getinstance()

return synchronizedsingleton;

}}

上面的做法很簡單,就是將整個獲取例項的方法同步,這樣在乙個執行緒訪問這個方法時,其它所有的執行緒都要處於掛起等待狀態,倒是避免了剛才同步訪問創造出多個例項的危險,但是這樣會造成很多無謂的等待,因此效率很低。

所以我們要對上面的**做乙個優化,**如下所示:

public synchronizedsingleton 

//給出乙個公共的靜態方法返回乙個單一的例項

public

static synchronizedsingleton getinstance()}}

return synchronizedsingleton;

}}

當然上面的**已經是比較完美的了,但是依然存在一些小問題,這個問題我也弄的不是很明白,就不在這個顯擺了。

下面直接給出最終的單例模式的解決方案:

public

class singleton

public

static singleton getinstance()

//私有化的內部類

private

static

class singletoninstance

}

單例模式應該保證一下幾點:

- singleton最多只有乙個例項,在不考慮反射強行突破訪問限制的情況下。

- 保證了併發訪問的情況下,不會發生由於併發而產生多個例項。

- 保證了併發訪問的情況下,不會由於初始化動作未完全完成而造成使用了尚未正確初始化的例項。

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會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...