使用枚举为每个不同的对象返回不同的操作

问题描述

我有一个播放器对象列表,其中包含如下详细信息

Player{FirstName='marco',LastName='Reus',Team='Dortmund',Country='Germany',fitness='Unfit',RecoveryTime='Slow'}

该程序的主要目的是考虑到球员的身体状况和恢复时间,并返回一套行动计划以帮助他们恢复健康。

我利用了枚举,并为每个枚举赋予了一个整数值aValue

public enum LevelOffitness {
    /**
     * Enum that represent the different level of fitness of each player
     */

    CAREER_IN_DOUBT(8),INDEFINITELY_INJURED(7),INJURED(6),UNFIT(5),CLOSE_TO_fitness(4),NEAR_MATCH_FIT(3),MATCH_FIT(2),DATA_DEFICIENT(1),NOT_EVALUATED(0);

    private int value;

    LevelOffitness (int aValue) {
        this.value = aValue;
    }

    public int getValue () {
        return value;
    }


}

我还有一套列举行动计划:

public enum ActionPlans{


    GRADUAL_REHABILITATION,SURGERY,INTENSE_GYM_AND_THERAPY,NO_ACTION_NEEDED,REST_AND_REHABILITATION 

}

在此示例中,我尝试以marco为例,如果玩家的Leveloffitness为5,这不适合并且恢复时间很慢,请返回逐步康复作为行动计划。

非常感谢

解决方法

我认为您需要给定玩家一个额外的方法LevelOfFitness.from(String)和另一个getActionPlan

public LevelOfFitness from(String value){  
  // do some input checks

  LevelOfFitness found = null;
  for(LevelOfFitness level : LevelOfFitness.values()){
      if(level.name().equalsIgnoreCase(value)){
         return level;
      }
  }

   throw new IllegalStateException("Not able to find fitness level for " + value);
}


 public ActionPlans getActionPlan(Player player){

        String fitness = player.getFitness();
        LevelOfFitness levelOfFitness = LevelOfFitness.from(fitness);

        ActionPlans actionPlan = null;
        if(fitnessLevelOfFitness.getValue() == 5){
            actionPlan = GRADUAL_REHABILITATION;
        }

        .....

        return actionPlan;
    }

您甚至可以将此类方法放在Player类本身中,在这种情况下,您可以进一步封装逻辑,而无需传递玩家引用。