1. 程式人生 > >單例模式的餓漢式、懶漢式

單例模式的餓漢式、懶漢式

單例設計模式:保證在記憶體中只有一個物件

餓漢式:

    /*
     *  餓漢式:
     */
class MySingleton{
    //1. 構造方法私有化,其他類不能訪問該構造(建立該物件)
    private MySingleton(){};
    //2. 建立本類物件,成員變數被私有,對外提供公共的獲取方法
    private static MySingleton s=new MySingleton();
    //3. 對外提供公共的訪問方法
    public static MySingleton getInstance(){
        return s;
    }
}

懶漢式:懶漢式:單例的延遲載入模式(面試會用),但是多執行緒的時候會有安全隱患

    /*
     *  懶漢式:單例的延遲載入模式(面試會用),但是多執行緒的時候會有安全隱患
     */
class MySingleton{
    //1. 構造方法私有化,其他類不能訪問該構造(建立該物件)
    private MySingleton(){};
    //2. 宣告一個引用
    private static MySingleton s;
    //3. 對外提供公共的訪問方法
    public static MySingleton getInstance(){
        if(s == null){
            s=new MySingleton();
        }
        return s;
    }
}
public class Singleton {
    public static void main(String[] args) {

        MySingleton m1=MySingleton.getInstance();
        MySingleton m2=MySingleton.getInstance();
        System.out.println(m1==m2);
    }
}
第三種方式就是用final修飾
區別:
餓漢式:空間換取時間,多執行緒時:餓漢式不會建立多個物件
懶漢式:時間換取空間,多執行緒時:懶漢式可能會建立多個物件