java - Decide which Enum return based on object properties -


i'm wondering if there design pattern me problem.

let's have class person has 3 attributes: name, nickname , speaksenglish , enum persontype typeone, typetwo , typethree.

let's if person has nickname , speaksenglish it's typeone. if has nickame doesn't speaksenglish, it's typetwo. if not have nickame, it's typethree.

my first thought have method if-else , returning related enum. in future can have more attributes in person , other types of persontype decide.

so, first thought create method bunch of if (...) { return <persontype> } or switch-case, wondering if there design pattern can use instead of ifs , switch-case.

i recomend use simple inheritance immutable objects.

so, @ first have create abstract class:

public abstract class abstractperson {      private final string name;     private final optional<string> nickname;      private final boolean speaksenglish;     private final persontype persontype;      protected abstractperson(final string name, final optional<string> 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<string> getnickname() {         return nickname;     }      public boolean getspeaksenglish() {         return speaksenglish;     }      public persontype getpersontype() {         return persontype;     }  } 

with persontype enum:

public enum persontype {      typeone, typetwo, typethree;  } 

now, have 3 options corresponding constructors in child classes:

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);     }  } 

in case, our concrete classes immutable , type defined in moment of creation. don't need create if-else ladders - if want create new type, create new class/constructor.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -