{
// 使用一個類變量緩存曾經創建的實例
private static Singleton instance;
// 將構造器使用private修飾,隱藏該構造器
private Singleton(){}
// 提供一個靜態方法,用於返回Singleton實例
// 該方法可以加入自定義的控制,保證只產生一個Singleton對象
public static Singleton getInstance()
{
// 如果instance爲null,表明還不曾創建Singleton對象
// 如果instance不爲null,則表明已經創建了Singleton對象,將不會執行該方法
if (instance == null)
{
// 創建一個Singleton對象,並將其緩存起來
instance = new Singleton();
}
return instance;
}
}
優點:減少創建java實例所帶來的系統開銷
會帶來線程安全的問題
線程安全的單例模式
- public class Singleton{
- private static Singleton instance=null;
- private Singleton(){}
- public static synchronized Singleton getInstance(){
- if(instance==null){
- instance=new Singleton();
- }
- return instance;
- }
- }
- //懶漢式
- class LSingle{
- private static Instance _instance = null;
- private LSingle(){}
- public static Instance getInstance(){
- if(_instance==null){
- synchronized(LSingle.class){
- _instance = new Instance();
- }
- }
- return _instance;
- }
- }
- //餓漢式
- class ESingle{
- private static Instance _instance = new Instance();
- private ESingle(){}
- public static Instance getInstance(){
- return _instance;
- }
- }