正如標題,我讀<Effective Java>
,但是當我讀到第二章,它說爲什麼BUILDER模式比javaBean更安全?
2
A
回答
1
當對象是不可變的,你有多大少操心比當物體(如JavaBeans)是可變。一旦你擁有了一個不可變的對象,它基本上可以避免線程同步的問題,並且你可以自由地傳遞它,而不需要做防禦性的拷貝(以保護用戶或者善意的庫方法來改變數據)。
當然,創建一個可變對象可能會非常棘手,並且可能涉及構造函數管理的時間太長。這就是Builder模式可以幫助你的地方 - 使用可變Builder創建初始狀態,然後將其複製到該對象構造函數中的不可變對象。
請注意,如果不可變對象包含對任何可變對象的引用,則外部對象並非真正不可變。您可能會發現ImmutableList
,ImmutableMap
和ImmutableSet
便利在Guava。
+0
很明顯,謝謝。 – HeJian
0
Builder
模式更安全,因爲Builder可以在將所有參數傳遞給構造函數之前對其進行驗證。
您可能會感興趣爲此從Google獲得Preconditions
。
更不用說,使用Builder可以使構建複雜的對象非常簡潔。
我不會說建設者模式後的對象是或多或少的immutable
或可變的然後JavaBean
。這取決於你如何聲明字段以及你公開什麼方法。
相關問題
- 1. 爲什麼scanf比getchar更安全?
- 2. 爲什麼ASP.NET比ASP Classic更安全?
- 3. 爲什麼Rabin Cryptosystem比RSA更安全?
- 4. 爲什麼vapply比sapply更安全?
- 5. 表達式樹爲什麼比反射更安全?
- 6. 爲什麼閉包比JavaScript中的全局變量更安全?
- 7. 爲什麼Enum認爲比常量更安全?
- 8. 爲什麼認爲加密更安全?
- 9. 什麼是PHP安全模式GID?
- 10. firefox安全模式有什麼作用?
- 11. 什麼是javabean?
- 12. 爲什麼引用變量類型比指針更安全?
- 13. 爲什麼複製{ctrl down} c {ctrl up}比^ c更安全?
- 14. 與其他編程語言相比,爲什麼Java更安全?
- 15. 爲什麼Docker的祕密比環境變量更安全?
- 16. 爲什麼參考比指針更安全?
- 17. 什麼是PHP 5.4的默認行爲有關安全模式
- 18. 爲什麼Google Dataproc HDFS名稱節點處於安全模式?
- 19. 這爲什麼不安全?
- 20. 爲什麼Generics.Collections.TObjectList.List不安全?
- 21. __caller__爲什麼不安全?
- 22. 爲什麼CopyOnWriteArrayList安全?
- 23. vsnprintf爲什麼安全?
- 24. 爲什麼你更喜歡spacemacs比'惡'模式運行的emacs?
- 25. 什麼是全屏模式
- 26. 爲什麼我的不安全代碼塊比我的安全代碼慢?
- 27. Builder模式和Flyweight模式有什麼區別?
- 28. 在C中,使用比strtrns更安全的函數是什麼?
- 29. 爲什麼Builder模式比在構造類的對象中創建的構造函數更好?
- 30. 爲什麼Builder builder而不是alertdialoge.Builder?
你的問題被切斷了嗎?看起來它完成之前就已經提交了。 –