不可變類是例項不能被修改的類。每個例項中包含的所有資訊都必須在建立該例項的時候就提供,並在物件的整個宣告週期內固定不變。例如string、biginteger和bigdecimal類。不可變類更易於設計、實現和使用。
設計不可變類的原則:
1:不要提供任何修改物件狀態的方法
2:保證類不會被擴充套件
3:使所有域都是final的
4:使所有的域都是私有的
5:確保對於任何可變元件的互斥訪問
不可變物件本質上是執行緒安全的,它們不要求同步。所以,不可變物件可以被自由的共享。
不可變物件的缺點是:對於每乙個不同的值都需要乙個單獨的物件。
string stringbuffer stringbuilder的關係類似的是biginteger和bitset
使類成為不可子類化的另一種方法是將類的建構函式私有化,然後提供靜態工廠來產生物件。
關於不可變性與可變性的「巢狀」聯想
先給出定義 先申述乙個概念 變數 引用 值 也就是 該變數初始化的記憶體 可變性與不可變性 引用可變與否,值可變與否。值的可變性取決於 值的型別是否是可變的,這取決於建立該值的類是否可變。而引用的可變性取決於 該變數命名時是否字首有 final 那麼對於乙個物件而言,其不可變性的程度 是什麼?乙個物...
支援非可變性
概念 乙個非可變性的類是乙個簡單的類,每個例項包括的資訊都是他在被建立的時候就提供出來的,並且在物件的生命週期內不是不能更改的。這樣的類如 string,biginteger等等。為什麼會有這樣的類呢?他們包含了優雅的設計思想 簡單,不可變,穩定。其實有點很提倡使用非可變類,但是不一定非要使用。下面...
共性和可變性分析
考慮設計中什麼應該是可變的。這種方法與關注引起重新設計的原因剛好相反。它不是考慮什麼會迫使設計發生改變,而是考慮什麼能夠在不引起重新設計的前提下改變。這時主要關注的就是對變化的概念進行封裝,這時許多設計模式的主題。如何在問題領域中找到不同變化,如何找到不同領域中的共同點。找到變化的地點,稱為 共性分...