單例模式的好處能夠幫助我們實現物件只建立乙個例項,並且提供乙個全域性的訪問介面。在android開發中,單例模式能夠很好的幫助我們減少物件的建立,從而提高應用的整體效能。在web程式中,單例模式常常應用在工具類等應用場合,例如jdbc連線工具類
初次接觸單例模式,先看乙個簡單的demo:
public class sendservice
//向外界統一暴露乙個介面,如果呼叫sendservice的其他方法,必須呼叫此方法生成物件
public static sendservice getinstence()
return sendservice;
} //其它方法,盡量避免申明為static,否則失去單例模式就失去了意義
public void otherfunction()
}
以上簡單demo經過簡單測試會發現,在多執行緒中會發現問題。
可以將為getinstence方法加上乙個synchronized
同步鎖,但是這種情況下又影響了系能!
後來人家就在此基礎上加工能為餓漢式和懶漢式兩種單例模式
餓漢式:
/**
* 餓漢式
*/public class sendservice
public static sendservice getinstance()
}
餓漢式不會出現併發問題,在
classloader
載入類後
例項就會第一時間被建立,餓漢式的建立方式在一些場景中將無法使用:當
例項的建立是依賴引數或者配置檔案的,在
getinstance()
之前必須呼叫某個方法設定引數給它,那樣這種單例寫法就無法使用了。
懶漢式:
/**
* 懶漢式
*/
public class sendservice
public static sendservice getinstance()
}
懶漢式仍然使用jvm本身機制保證了執行緒安全問題;由於singletonholder是私有的,除了getinstance()之外沒有辦法訪問它,因此它是懶漢式的;同時讀取例項的時候不會進行同步,沒有效能缺陷;也不依賴jdk版本。
第乙個demo到第二個demo之間的原因講的不是很清楚,待筆者在實際開發中有了更深的理解後再補充吧!
設計模式實戰之單例模式
二 程式設計實戰 三 總結 保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。各種controller類和service類以及標記component類 這個真的太多了 getter publ...
設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...
設計模式之單例模式
package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...