我建议你使用简单的继承与不可变对象.
所以,首先你必须创建抽象类:
public abstract class AbstractPerson {
private final String name;
private final Optional nickname;
private final boolean speaksEnglish;
private final PersonType personType;
protected AbstractPerson(final String name, final Optional nickname, final boolean speaksEnglish, final PersonType personType) {
this.name = name;
this.nickname = nickname;
this.speaksEnglish = speaksEnglish;
this.personType = personType;
}
public String getName() {
return name;
}
public Optional getNickname() {
return nickname;
}
public boolean getSpeaksEnglish() {
return speaksEnglish;
}
public PersonType getPersonType() {
return personType;
}
}
使用PersonType枚举:
public enum PersonType {
TypeOne, TypeTwo, TypeThree;
}
现在,我们在子类中有三个选项和相应的构造函数:
public final class EnglishSpeakingPerson extends AbstractPerson {
public EnglishSpeakingPerson(final String name, final String nickname) {
super(name, Optional.of(nickname), true, PersonType.TypeOne);
}
}
public final class Person extends AbstractPerson {
public Person(final String name, final String nickname) {
super(name, Optional.of(nickname), false, PersonType.TypeTwo);
}
public Person(final String name) {
super(name, Optional.empty(), false, PersonType.TypeThree);
}
}
在这种情况下,我们的具体类是不可变的,其类型是在创建时定义的.您不需要创建if-else梯形图 – 如果要创建新类型,只需创建新的类/构造函数.