2016-01-23 10:06:57 +09:00
|
|
|
package com.iluwatar.value.object;
|
|
|
|
|
|
|
|
/**
|
2016-02-03 23:33:40 +09:00
|
|
|
* A Value Object are objects which follow value semantics rather than reference semantics. This
|
|
|
|
* means value objects' equality are not based on identity. Two value objects are equal when they
|
|
|
|
* have the same value, not necessarily being the same object..
|
|
|
|
*
|
|
|
|
* Value Objects must override equals(), hashCode() to check the equality with values.
|
|
|
|
* Value Objects should be immutable so declare members final.
|
|
|
|
* Obtain instances by static factory methods.
|
|
|
|
* The elements of the state must be other values, including primitive types.
|
|
|
|
* Provide methods, typically simple getters, to get the elements of the state.
|
|
|
|
* A Value Object must check equality with equals() not ==
|
|
|
|
*
|
|
|
|
* For more specific and strict rules to implement value objects check the rules from Stephen
|
|
|
|
* Colebourne's term VALJO : http://blog.joda.org/2014/03/valjos-value-java-objects.html
|
2016-01-23 10:06:57 +09:00
|
|
|
*/
|
2016-01-28 22:39:50 +09:00
|
|
|
public class App {
|
2016-01-29 00:53:27 +09:00
|
|
|
/**
|
2016-02-03 22:49:59 +09:00
|
|
|
* This practice creates three HeroStats(Value object) and checks equality between those.
|
2016-01-29 00:53:27 +09:00
|
|
|
*/
|
2016-01-28 22:39:50 +09:00
|
|
|
public static void main(String[] args) {
|
2016-01-29 00:53:27 +09:00
|
|
|
HeroStat statA = HeroStat.valueOf(10, 5, 0);
|
2016-02-03 22:49:59 +09:00
|
|
|
HeroStat statB = HeroStat.valueOf(10, 5, 0);
|
|
|
|
HeroStat statC = HeroStat.valueOf(5, 1, 8);
|
2016-01-29 00:53:27 +09:00
|
|
|
|
|
|
|
System.out.println(statA.toString());
|
2016-02-03 23:33:40 +09:00
|
|
|
|
2016-02-03 22:49:59 +09:00
|
|
|
System.out.println("Is statA and statB equal : " + statA.equals(statB));
|
|
|
|
System.out.println("Is statA and statC equal : " + statA.equals(statC));
|
2016-01-28 22:39:50 +09:00
|
|
|
}
|
2016-01-23 10:06:57 +09:00
|
|
|
}
|