目錄目的
應用例項 **
保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。(菜鳥教程)乙個國家有乙個首都
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 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...