Java設計模式 單例模式(single)

2021-08-28 16:45:03 字數 1776 閱讀 6722

目錄目的

應用例項 **

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。(菜鳥教程)

乙個國家有乙個首都

windows 是多程序多執行緒的,在操作乙個檔案的時候,就不可避免地出現多個程序或執行緒同時操作乙個檔案的現象,所以所有檔案的處理必須通過唯一的例項來進行。

第一種:

package com.gary.designpattern.single;

/** * 飢餓模式(因為像飢餓的人一樣遇到吃的就吃):例項的初始化是在類載入時進行的。

* 故有時候初始化太早可能會造成資源浪費

* @author gary

* */

public class singleton

private static singleton instance = new singleton();

public static singleton getinstance()

}

第二種:

package com.gary.designpattern.single;

/** * 懶模式(不餓,遇到吃的自己懶得吃,等需要吃的時候再吃)

* 問題:若多執行緒則會出現同時到if(instance=null)後建立例項。

* 破壞了例項的唯一性。

* 解決:給getinstance方法加鎖 synchronized

* 問題:會使得除了乙個執行緒之外的所有執行緒都等待。

* 解決:雙重檢查

* 問題:instance = new single();並非原子操作。

* 分析:這句實際上是三個操作

* 1.給singleton分配記憶體

* 2.呼叫建構函式來初始化成員變數,形成例項

* 3.將single物件指向分配的記憶體

* 由於不是原子操作,故123可能順序發生變化132,則

* 當3執行2還沒執行時候,此時instance已經不是null

* 若有執行緒2發現instanc不是null,則直接返回instance,那麼就會報錯。

* 解決:給instance的宣告加上volatile關鍵字

* @author gary

* */

public class single

public static single getinstance()

}} return instance;

}}

第三種:

package com.gary.designpattern.single;

/** * 靜態內部類:

* 既餓又懶模式(雖然很飢餓但是仍然會等到需要的時候才吃)

* 基於類初始化的解決方案

* @author gary

* */

public class sing

private sing()

public static final sing getinstance()

}

第四種:

package com.gary.designpattern.single;

/** * 列舉-簡單高效安全,自動序列號機制

* singleton的最佳方法

* @author gary

* */

public enum sin

}

Java設計模式 單例模式

單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...

java設計模式 單例模式

這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...

java設計模式 單例模式

單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...