懶漢單例餓漢單例

設計模式:單例

                     設計模式:23個設計模式

                                                          創建型

                                                          行爲型

                                                          結構型

架構模式:

                戰略      


單例/單態:如何能保證一個類只出一個對象?     

                                                                  懶漢式:

                                                                              缺點:訪問速度慢

                                                                              優點:使用才加載對象          

                                                                              synchronized 同步可以解決懶漢式問題

                                                                 餓漢式:

                                                                             優點:訪問速度快

                                                                             缺點:提前加載

 下面說一下懶漢式和餓漢式的區別及優點:

                                                              餓漢式不管有沒有調用對象創建方法,都會預先在系統中創建一個靜態對象

                                                              懶漢式不會預先創建對象,只有在第一次調用時才創建對象

                                                              餓漢式優點: 在多線程模式下是安全的

                                                              缺點: 沒有調用方法前就被加載,會佔用內存

                                                              懶漢式優點:只有調用方法才創建對象,不會佔用內存

                                                              缺點:在多線程模式下不安全



public class Hello {//餓漢式單例

    //構造器私有化 不可以在外界創建此類對象
    private Hello() {
        System.out.println("創建對象");
    }

    //靜態成員只有一份 加載本類對象 也只有一個
    private static Hello hello = new Hello();//靜態只可能有一份

    //此方法是返回本類唯一對象
    public static Hello getHello() {
        return hello;//只要調用此方法就可以創建對象
    }

}


public class SayHello {

    private SayHello(){
        System.out.println("SayHello創建了對象");
    }

    private static SayHello sayHello;//聲明對象

    public static synchronized SayHello getSayHello(){
        if(sayHello==null){//判斷調用爲空嗎?
            sayHello=new SayHello();//如果不爲空再創建對象
        }
        return sayHello;//如果不爲空直接返回對象
    }

}

              
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章