java基礎 單例模式,列舉型別

2021-09-12 10:08:50 字數 1686 閱讀 6868

在類和物件的學習中,有一種類只能例項化一次,這種叫做單例模式

單例模式又分為兩種,一種是餓漢式單例模式,另一種是懶漢式單例模式,首先讓我們來看一下單例模式:

單例模式又稱為singleton模式,指的是乙個類在jvm中只有乙個例項存在;

餓漢式單例模式:對於乙個類,在例項化它的過程中採用private static修飾之後,在獲取它的時候就需要定義乙個public static 類名 getinstance()方法,在主方法的設定中,就需要用類名.getinstance來建立乙個物件,如果我們建立多個,那麼它們其實都是同乙個物件,這些可以通過下面**說明:

public class person 

//準備乙個引用,指向乙個例項化物件

private static person person = new person();

//提供給呼叫者獲取12行定義的物件

public static person getinstance()

public static void main(string args)

}

懶漢式單例模式:懶漢式單例模式和餓漢式單例模式不同,只有呼叫getinstance的時候才會建立例項;

public class person 

//準備乙個引用,指向乙個例項化物件

private static person person ;

//提供給呼叫者獲取12行定義的物件

public static person getinstance()

return person;

} public static void main(string args)

}

什麼是例項模式?

例項模式的三要素:

構造方法私有化,

靜態屬性指向例項,

public static 的getinstance方法,返回第二步的靜態屬性。

什麼時候使用餓漢式?什麼時候使用懶漢式?

餓漢式是立即載入的方式,無論是否用到這個物件,都會被載入。

懶漢式是延遲載入的的方式,只有使用的時候才會去載入。

如果業務上有比較充分的啟動和初始化時間就使用餓漢式,否則使用懶漢式。

列舉型別:關於列舉型別,我們來看乙個簡單的例子;

public class season

public static void main(string args)

}}

接下來我們來做乙個假設,如果我使用case 1:case 2:case 3:case 4:來進行判斷,即傳入的不是列舉型別,而是int型別,這樣會出現乙個問題,就是在傳入的過程中如果傳入了5,那麼就會出現不在判斷範圍內的情況,但是使用列舉型別就不會出現這種情況,因為它已經牢牢的把引數的範圍限制在了列舉資料的型別中,不會出現意外的情況;

除此之外,我們依然可以使用增強的for迴圈來進行對列舉型別進行輸出:

public class season

//利用增強的for迴圈來輸出列舉型別

public static void main(string args)

}}

輸出結果是:spring    summmer    autumn    winter    

java基礎 單例模式

單例模式 singleton模式 乙個類有且僅有乙個例項,並且自行例項化向整個系統提供 公開 具體實現的角度來說 構造方法私有化 靜態屬性指向例項 public static的getinstance方法,返回第二部的靜態屬性 餓漢模式,無論如何都會建立乙個例項 例子取自 以lol中的大龍 giant...

單例模式之列舉單例

列舉也是餓漢式。列舉單例 問題1 列舉單例是如何限制例項個數的 反編譯後可以看到 就是我們列舉類的乙個靜態成員變數而已,單例項的 問題2 列舉單例在建立時是否有併發問題 沒有,因為它也是靜態成員變數,它的執行緒安全性也是在類載入階段完成的。那個時候不會有執行緒併發問題 問題3 列舉單例能否被反射破壞...

Java基礎 設計模式 單例模式

單例模式,顧名思義,即只能建立乙個物件,是一種十分常見的設計模式。下面介紹一下兩種比較簡單的單例模式 1 餓漢式 不可以延時載入,類載入的時候就建立物件。如果沒有用到這個物件的話,就會導致資源浪費。2 懶漢式 可以延時載入,即用到物件的時候再new物件。但是必須考慮同步問題,如果不考慮,當多個執行緒...