設計模式(一) 單例模式

2021-09-12 02:44:41 字數 1989 閱讀 7536

定義:

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項。

特點:

1、單例類只能有乙個例項。

2、單例類必須自己自己建立自己的唯一例項。

3、單例類必須給所有其他物件提供這一例項

單例模式的要點:

1,私有的構造方法

2,指向自己例項的私有靜態引用

3,以自己例項為返回值的靜態的公有的方法

單例模式根據例項化物件時機的不同分為兩種:

一種是餓漢式單例,一種是懶漢式單例。

餓漢式單例在單例類被載入時候,就例項化乙個物件交給自己的引用。

懶漢式在呼叫取得例項方法的時候才會例項化物件。

/**

* 單例模式--餓漢式

* * @author wanting

* */

public class singleton_hungry

}

/**

* 單例模式--懶漢式(下面的兩種都是執行緒安全的)

* * @author wanting

* */

public class singleton_lazy

return instance;

} // 利用雙重鎖的方式將鎖粒度減小了

public static singleton_lazy getinstance_2()

}} return instance;

}}

單例模式的優點:

1,在記憶體中只有乙個物件,節省記憶體空間。

2,避免頻繁的建立銷毀物件,可以提高效能。

3,避免對共享資源的多重占用。

4,可以全域性訪問。

單例模式的缺點:

1,擴充套件困難,由於getinstance靜態函式沒有辦法生成子類的例項。如果要拓展,只有重寫那個類。

2,隱式使用引起類結構不清晰。

3,導致程式記憶體洩露的問題。

適用場景:

1,需要頻繁例項化然後銷毀的物件。

2,建立物件時耗時過多或者耗資源過多,但又經常用到的物件。

3,資源共享的情況下,避免由於資源操作時導致的效能或損耗等

4,控制資源的情況下,方便資源之間的互相通訊。

再貼一種懶漢式的另一種的寫法

/**

* 內部類在使用時才被載入,所以只有在使用時才會存在於記憶體中;由於 singletonholder 是私有的,除了 getinstance()

* 之外沒有辦法訪問它,因此它是懶漢式的;同時讀取例項的時候不會進行同步,沒有效能缺陷;也不依賴 jdk 版本。

* * @author wanting

* */

public class singleton_improve

public static final singleton_improve getinstance()

}

public class singleton_lazy implements serializable 

}/**

* 執行緒安全,鎖粒度較小(雙重鎖)

** @return

*/public static singleton_lazy getinstance() throws exception }}

return instance;

}/**

* 保證反序列化安全

*/protected object readresolve() throws exception

}

設計模式 一 單例模式

思路 1 如果其他程式能夠隨意用new建立該類物件,那麼就無法控制個數。因此,不讓其他程式用new建立該類的物件。2 既然不讓其他程式new該類物件,那麼該類在自己內部就要建立乙個物件,否則該類就永遠無法建立物件了。3 該類將建立的物件對外 整個系統 提供,讓其他程式獲取並使用。步驟 1 將該類中的...

設計模式(一) 單例模式

這種模式只涉及到乙個單一的類,該類負責建立自己的物件,並確保只建立乙個物件。單例只有乙個例項 單例類必須建立自己唯一的例項 單例類必須給其他物件提供這唯一的例項 由於當今的程式設計模型都是基於多執行緒方式,因此此處只介紹執行緒安全的幾種實現。第一次被呼叫時才建立物件,屬於懶載入 lazy init ...

設計模式(一) 單例模式

單例模式 保證執行記憶體中只有乙個實體的實現模式就是單例模式,最常見的有餓漢模式 懶漢模式兩種。餓漢模式 package com.madg.design.singleton public class hungry public hungry getinstance 懶漢模式 package com....