Java設計模式一 單例模式

2021-08-16 09:52:29 字數 2164 閱讀 8868

/**

* 1、餓漢式

* 在呼叫之前會首先例項化.

* 優點:寫法簡單,避免了執行緒同步問題。

* 缺點:在呼叫之前就會例項化,沒有達到lazy loading的效果。如果自始至終都沒有使用過這個實力,就會造成記憶體浪費。

* * 注意: 1、載入順序,先靜態再動態,先屬性再方法,先上後下。

* 2、構造方法要是私有化的,

* 3、屬性要用final修飾,不能夠被覆蓋。

* @author wangfy

*/public class ehanshi

public static ehanshi getinstance()

}

/**

* 2、餓漢式:靜態**塊實現

* 該方式同上乙個相同,但是例項化使用了靜態**塊來實現。

* @author wangfy

*/public class ehanshi2

private ehanshi2(){}

public static ehanshi2 getinstance()

}

/**

* 3、懶漢式:執行緒不安全

* 呼叫的時候才會例項化

* 優點:達到lazy loading的效果

* 缺點:執行緒不安全,如果多執行緒情況下,如果乙個執行緒進入if判斷,另乙個執行緒也進入if判斷,還沒有往下執行,那麼就會產生多個例項

* @author wangfy

*/public class lanhanshi

public static lanhanshi getinstance()

return lanhanshi;

}}

/**

* 4、懶漢式:執行緒安全,同步方法

* 在獲取例項的方法上加上同步鎖。

* 優點:即達到lazy loading的效果,又解決了執行緒不安全的問題。

* 缺點:效率低下,每個執行緒在獲取類的時候,執行getinstance都要進行同步。

* 需要改進:而且該方法實現過一次例項化就行了。後面獲取例項不需要進入同步直接return就可以了。

* @author wangfy

*/public class lanhanshi2

public static synchronized lanhanshi2 getinstance()

return lanhanshi;

}}

/**

* 5、懶漢式:雙重檢查 double-check

* 摒棄同步方法,使用了同步**塊。進行了兩次if判斷。這樣例項化只執行了一次,後面如果再要訪問直接return。

* 優點:即達到lazy loading的效果,又解決了執行緒不安全的問題,效率相對較高。

* @author wangfy

*/public class lanhanshi3

public static lanhanshi3 getinstance()

}} return lanhanshi;

}}

/**

* 6、懶漢式:靜態內部類

* 該方式跟餓漢式採用的機制類似,但是有不同。兩隻都是使用了類載入機制來保證例項化時只有乙個執行緒。

* 不同的地方在餓漢式方式是只要lanhanshi4類被裝載就會例項化,沒有懶載入的作用,

* 而靜態內部類方式在lanhanshi4類被裝載時並不會立即例項化,而是在需要例項化時,

* 呼叫getinstance方法,才會裝載lanhaninstance類,從而完成lanhanshi4的例項化。

* 類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡,jvm幫助我們保證了執行緒的安全性,在類進行初始化時,別的執行緒是無法進入的。

* 優點:避免了執行緒不安全,延遲載入,效率高。

* @author wangfy

*/public class lanhanshi4

private static class lanhaninstance

public static lanhanshi4 getinstance()

}

Java設計模式(一) 單例模式

對於單例,最早可追溯到我上學那會兒的課程實習,那時候有企業裡的員工給我們進行軟體程式設計培訓,那會兒第一次聽說單例的概念。在印象裡,問 你們知道如何只建立出乙個物件嗎?答 不知道。為什麼只要建立乙個物件 問 聽說過單例嗎?答 沒有,單例是幹啥的?解釋 單例就是保證程式執行期間,保證某乙個類永遠只有乙...

JAVA設計模式(一)單例模式

單例類只能有乙個例項。單例類必須自己建立自己的唯一例項。單例類必須給所有其他物件提供這一例項。private static singleton instance private singleton public static singleton getinstance return instance...

JAVA 設計模式(一)單例模式

懶漢模式 public class singlelh public singlelh getinstance 餓漢模式 public class singlelh public singlelh getinstance 懶漢模式可以延遲載入,但是執行緒不安全,得加鎖 餓漢模式執行緒安全,但是不能延遲...