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