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