java – 根据对象属性确定哪个枚举返回
我想知道是否有一些设计模式来帮助我解决这个问题.
假设我有一个Person类,它有三个属性:name,nickname和speaksEnglish,以及一个带TypeOne,TypeTwo和TypeThree的Enum PersonType. 假设一个人有昵称并说英语,那么它就是一个TypeOne.如果它有昵称但不会说英语,那就是TypeTwo.如果它没有昵称,那么它就是TypeThree. 我的第一个想法将有一个方法与一些if-else并返回相关的枚举.将来我可以在Person和其他类型的PersonType中有更多属性来决定. 所以,我的第一个想法是用一堆if(…){return< PersonType>创建一个方法.或者switch-case,但我想知道是否有一些我可以使用的设计模式而不是ifs和switch-case. 解决方法
我建议你使用简单的继承与不可变对象.
所以,首先你必须创建抽象类: 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; } } 使用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,false,PersonType.TypeTwo); } public Person(final String name) { super(name,Optional.empty(),PersonType.TypeThree); } } 在这种情况下,我们的具体类是不可变的,其类型是在创建时定义的.您不需要创建if-else梯形图 – 如果要创建新类型,只需创建新的类/构造函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |