動機(Motivation)
在許多系統(tǒng)中,你都可以對對象做一個有用的分類:reference object和value
objects。前者就像[客戶]、[帳戶]這樣的東西,每個對象都代表真實世界中的一個實物,你可以直接以相等操作符(==,用來檢驗同一性,
identity)檢查兩個對象是否相等。后者則是像[日期]、[錢]這樣的東西,它們完全由其所含的數(shù)據(jù)值來定義,你并不在意副本的存在;系統(tǒng)中或許存
在成百上千個內容為“1/1/2000”的[日期]對象。當然,你也需要知道兩個value objects是否相等,所以你需要覆寫equals()(以及hashCode())。
要在reference object和value object之間做選擇有時并不容易。有時侯,你會從一個簡單的value object開始,在其中保存少量不可修改的數(shù)據(jù)。而后,你可能會希望給這個對象加入一些可修改數(shù)據(jù),并確保對任何一個對象的修改都能影響到所有引用此一對象的地方。這時候你就需要將這個對象變成一個reference object。