2012-11-02 52 views

回答

1

當對象是不可變的,你有多大少操心比當物體(如JavaBeans)是可變。一旦你擁有了一個不可變的對象,它基本上可以避免線程同步的問題,並且你可以自由地傳遞它,而不需要做防禦性的拷貝(以保護用戶或者善意的庫方法來改變數據)。

當然,創建一個可變對象可能會非常棘手,並且可能涉及構造函數管理的時間太長。這就是Builder模式可以幫助你的地方 - 使用可變Builder創建初始狀態,然後將其複製到該對象構造函數中的不可變對象。

請注意,如果不可變對象包含對任何可變對象的引用,則外部對象並非真正不可變。您可能會發現ImmutableListImmutableMapImmutableSet便利在Guava

+0

很明顯,謝謝。 – HeJian

0

Builder模式更安全,因爲Builder可以在將所有參數傳遞給構造函數之前對其進行驗證。

您可能會感興趣爲此從Google獲得Preconditions

更不用說,使用Builder可以使構建複雜的對象非常簡潔。

我不會說建設者模式後的對象是或多或少的immutable或可變的然後JavaBean。這取決於你如何聲明字段以及你公開什麼方法。

相關問題