第十八條:盡量使用不可變對象
設(shè)計類的時候亲怠,應(yīng)充分運(yùn)用屬性來封裝數(shù)據(jù)渔期。
在使用屬性時,則可將其聲明為“只讀”唾琼。
默認(rèn)情況下兄春,屬性是“既可讀又可寫的”,這樣設(shè)計出來的類都是“可變的”(mutable)锡溯。
不過一般情況下赶舆,我們要建模的數(shù)據(jù)未必需要改變。
所以祭饭,一般情況下芜茵,對外公開的接口一般聲明為readOnly。
也可以在類內(nèi)部實現(xiàn)重新聲明為readwrite倡蝙,這樣可以在類內(nèi)部修改參數(shù)夕晓。
這樣,就只能在類的實現(xiàn)代碼內(nèi)部設(shè)置這些屬性了悠咱。
其實準(zhǔn)確的說,在對象外部征炼,可以通過“鍵值編碼”(KVC)技術(shù)設(shè)置這些屬性的值析既。
【要點】
盡量創(chuàng)建不可變的對象。
若某屬性僅可于對象內(nèi)部修改谆奥,則在“class-continuation分類”中將其由readonly屬性擴(kuò)展為readwrite屬性眼坏。
不要把可變的collection作為屬性公開,而應(yīng)提供相關(guān)方法酸些,以此修改對象中的可變collection宰译。