單例模式:
1)一個類只能創建一個實例
2)構造函數和靜態變量(加載類時即初始化)需為private
3)get方法應該為public static,可供全局訪問
//懶漢模式 public class lazySingleton { private static lazySingleton singleton=null; //懶,所以就不實例化了,加載類較快,但是第一次訪問類可能會有點慢 private lazySingleton(){ //nothing } public static lazySingleton getSingleton(){ if(singleton==null){ synchronized (this){ if(singleton==null) //這里的二次判斷很有必要啊,在多線程中同時到達第一個if的可能有多個,若此處沒有二次二次判斷,會導致new singleton()同步執行多次。 singleton=new lazySingleton(); } } return singleton; } }
//餓漢模式 public class hungrySingleton { private static final singleton=new hungerySingleton();//此處最好不要丟掉final private hungrySingleton(){ //noting } public static hungrySingleton getSingleton(){ return singleton(); } }