100 lines
2.5 KiB
Java
Raw Normal View History

2016-01-28 22:39:50 +09:00
package com.iluwatar.value.object;
/**
* 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}
2016-01-28 22:39:50 +09:00
*/
public class HeroStat {
// Stats for a hero
2016-01-28 22:39:50 +09:00
private final int strength;
private final int intelligence;
private final int luck;
// All constructors must be private.
private HeroStat(int strength, int intelligence, int luck) {
super();
this.strength = strength;
this.intelligence = intelligence;
this.luck = luck;
}
// Static factory method to create new instances.
2016-01-28 22:39:50 +09:00
public static HeroStat valueOf(int strength, int intelligence, int luck) {
return new HeroStat(strength, intelligence, luck);
}
public int getStrength() {
return strength;
}
public int getIntelligence() {
return intelligence;
}
public int getLuck() {
return luck;
}
/*
* Recommended to provide a static factory method capable of creating an instance from the formal
2016-01-28 22:39:50 +09:00
* string representation declared like this. public static Juice parse(String string) {}
*/
// toString, hashCode, equals
@Override
public String toString() {
return "HeroStat [strength=" + strength + ", intelligence=" + intelligence + ", luck=" + luck
+ "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + intelligence;
result = prime * result + luck;
result = prime * result + strength;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
HeroStat other = (HeroStat) obj;
if (intelligence != other.intelligence) {
return false;
}
if (luck != other.luck) {
return false;
}
if (strength != other.strength) {
return false;
}
return true;
}
// The clone() method should not be public
2016-01-28 22:39:50 +09:00
}