Added comments in the code. modified index.md
This commit is contained in:
parent
083065ba93
commit
d3eb8a2ef2
@ -23,9 +23,9 @@ Use the Value Object when
|
|||||||
|
|
||||||
## Real world examples
|
## Real world examples
|
||||||
|
|
||||||
* [java.util.Date](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)
|
* [java.util.Optional](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)
|
||||||
|
* [java.time.LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html)
|
||||||
* [joda-time, money, beans](http://www.joda.org/)
|
* [joda-time, money, beans](http://www.joda.org/)
|
||||||
* [JSR-310 / ThreeTen project LocalDate](http://www.threeten.org/articles/local-date.html)
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
@ -1,12 +1,19 @@
|
|||||||
package com.iluwatar.value.object;
|
package com.iluwatar.value.object;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hello world!.
|
* App Class.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class App {
|
public class App {
|
||||||
|
/**
|
||||||
|
* main method.
|
||||||
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
HeroStat stat = HeroStat.valueOf(10, 5, 0);
|
HeroStat statA = HeroStat.valueOf(10, 5, 0);
|
||||||
System.out.println(stat.toString());
|
HeroStat statB = HeroStat.valueOf(5, 1, 8);
|
||||||
|
|
||||||
|
System.out.println(statA.toString());
|
||||||
|
// When using Value Objects do not use ==, only compare using equals().
|
||||||
|
System.out.println("is statA and statB equal : " + statA.equals(statB));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
package com.iluwatar.value.object;
|
package com.iluwatar.value.object;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Discount Coupon only discounts by percentage.
|
* HeroStat is a Value Object. following rules are from Stephen Colebourne's term VALJO(not the
|
||||||
*
|
* entire rule set) from : http://blog.joda.org/2014/03/valjos-value-java-objects.html<br>
|
||||||
|
* Value Objects must override equals(), hashCode() to check the equality with values. <br>
|
||||||
|
* Value Objects should be immutable so declare members final. Obtain instances by static factory
|
||||||
|
* methods. <br>
|
||||||
|
* The elements of the state must be other values, including primitive types.<br>
|
||||||
|
* Provide methods, typically simple getters, to get the elements of the state.<br>
|
||||||
|
*
|
||||||
|
* {@link http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html}
|
||||||
*/
|
*/
|
||||||
public class HeroStat {
|
public class HeroStat {
|
||||||
|
|
||||||
|
|
||||||
// stats for a hero
|
// Stats for a hero
|
||||||
|
|
||||||
private final int strength;
|
private final int strength;
|
||||||
private final int intelligence;
|
private final int intelligence;
|
||||||
@ -22,6 +29,7 @@ public class HeroStat {
|
|||||||
this.luck = luck;
|
this.luck = luck;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Static factory method to create new instances.
|
||||||
public static HeroStat valueOf(int strength, int intelligence, int luck) {
|
public static HeroStat valueOf(int strength, int intelligence, int luck) {
|
||||||
return new HeroStat(strength, intelligence, luck);
|
return new HeroStat(strength, intelligence, luck);
|
||||||
}
|
}
|
||||||
@ -39,7 +47,7 @@ public class HeroStat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* recommended to provide a static factory method capable of creating an instance from the formal
|
* Recommended to provide a static factory method capable of creating an instance from the formal
|
||||||
* string representation declared like this. public static Juice parse(String string) {}
|
* string representation declared like this. public static Juice parse(String string) {}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -86,6 +94,6 @@ public class HeroStat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// the clone() method should not be public
|
// The clone() method should not be public
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
package com.iluwatar.value.object;
|
package com.iluwatar.value.object;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.CoreMatchers.not;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
import com.google.common.testing.EqualsTester;
|
import com.google.common.testing.EqualsTester;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -11,6 +16,7 @@ public class HeroStatTest {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tester for equals() and hashCode() methods of a class.
|
* Tester for equals() and hashCode() methods of a class.
|
||||||
|
*
|
||||||
* @see http://www.javadoc.io/doc/com.google.guava/guava-testlib/19.0
|
* @see http://www.javadoc.io/doc/com.google.guava/guava-testlib/19.0
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
@ -20,4 +26,21 @@ public class HeroStatTest {
|
|||||||
new EqualsTester().addEqualityGroup(heroStatA, heroStatB).testEquals();
|
new EqualsTester().addEqualityGroup(heroStatA, heroStatB).testEquals();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The toString() for two equal values must be the same. For two non-equal values it must be
|
||||||
|
* different.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testToString() {
|
||||||
|
|
||||||
|
HeroStat heroStatA = HeroStat.valueOf(3, 9, 2);
|
||||||
|
HeroStat heroStatB = HeroStat.valueOf(3, 9, 2);
|
||||||
|
HeroStat heroStatC = HeroStat.valueOf(3, 9, 8);
|
||||||
|
|
||||||
|
assertThat(heroStatA.toString(), is(heroStatB.toString()));
|
||||||
|
assertThat(heroStatA.toString(), is(not(heroStatC.toString())));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user