動機(Motivation)
class常常會使用群集(collection,可能是array,list,set或vector)來保存一組實體.這樣的class通常也會提供針對該群集[取值/設值函數](getter/setter).
但是,集群的處理方式應該和其他種類的數據略有不同.取值函數(getter)不該返回群集自身,因為這將讓用戶得以修改群集內容而群集擁有者卻一無所悉.這也會對用戶暴露過多[對象內部數據結構]的信息.如果一個取值函數(getter)確實需要返回多個值,它應該避免用戶直接操作對象內所保存的群集,并隱藏對象內[與用戶無關]的數據結構.至于如何做到這一點,視你使用的Java版本不同而有所不同.
另外,不應該為這整個群集提供一個設值函數(setter),但應該提供用以為群集添加/移除(add/remove)元素的函數.這樣,群集擁有者(對象)就可以控制群集元素的添加和移除.
如果你做到以上數點,群集(collection)就被很好地封裝起來了,這便可以降低群集擁有者(class)和用戶之間的耦合度.
class常常會使用群集(collection,可能是array,list,set或vector)來保存一組實體.這樣的class通常也會提供針對該群集[取值/設值函數](getter/setter).
但是,集群的處理方式應該和其他種類的數據略有不同.取值函數(getter)不該返回群集自身,因為這將讓用戶得以修改群集內容而群集擁有者卻一無所悉.這也會對用戶暴露過多[對象內部數據結構]的信息.如果一個取值函數(getter)確實需要返回多個值,它應該避免用戶直接操作對象內所保存的群集,并隱藏對象內[與用戶無關]的數據結構.至于如何做到這一點,視你使用的Java版本不同而有所不同.
另外,不應該為這整個群集提供一個設值函數(setter),但應該提供用以為群集添加/移除(add/remove)元素的函數.這樣,群集擁有者(對象)就可以控制群集元素的添加和移除.
如果你做到以上數點,群集(collection)就被很好地封裝起來了,這便可以降低群集擁有者(class)和用戶之間的耦合度.