1. 程式人生 > >單例模式:餓漢和懶漢

單例模式:餓漢和懶漢

接下來就說下單例模式了,這個在實際應用還是比較常用的!

首先,單例分為懶漢式和餓漢式:

餓漢式:類載入的時候,建立物件。 因此類載入速度慢執行緒相對安全 懶漢式:類載入的時候,不會建立物件,呼叫時才會建立物件。因此類載入速度快執行緒相對不安全,一般要配合synchronized使用。

廢話少說,下面是餓漢式:

public class Single {

    //餓漢式:
    private static Single single=new Single();

    public Single() {
    }

    public static Single getSingle(){
        return single;
    }

}

單例模式思路:

  1. 私有屬性
  2. 私有構造方法
  3. 公開的getSingle方法

單例模式作用:保證了物件的唯一性

- 適用場景: 1.需要生成唯一序列的環境 2.需要頻繁例項化然後銷燬的物件。 3.建立物件時耗時過多或者耗資源過多,但又經常用到的物件。 4.方便資源相互通訊的環境

懶漢式如下:

public class Single2 {

    //懶漢式:
    private static Single2 single=null;

    private Single2(){

    }
    /**
     * 懶漢模式在使用時,容易引起不同步問題,所以應該建立同步"鎖"
     * @return
     */
    public static Single2 getSingle(){
        if(single==null){
            synchronized (Single2.class){
                single=new Single2();
            }
        }
        return single;
    }    
}

最後咱們來談下,單例模式的優缺點:

優點

1.實現了對唯一例項訪問的可控 2.對於一些需要頻繁建立和銷燬的物件來說可以提高系統的效能。

缺點

1.不適用於變化頻繁的物件 2.濫用單例將帶來一些負面問題,如為了節省資源將資料庫連線池物件設計為的單例類,可能會導致共享連線池物件的程式過多而出現連線池溢位。 3.如果例項化的物件長時間不被利用,系統會認為該物件是垃圾而被回收,這可能會導致物件狀態的丟失。

以上有寫的不對的地方,請及時通知博主,以做修改!!!!