java - 我应该使用哪种设计模式来按积分设置比赛 field ?

标签 java design-patterns software-design

我有一个类AthleticCompetitionResults并想创建一个类来返回这个 AthleticCompetitionResults 的对象从行初始化,例如

Siim Susi;12.61;5.00;9.22;1.50;60.39;16.43;21.60;2.60;35.81;5.25.72

Siim Susi2;12.61;5.00;9.22;1.50;60.39;16.43;21.60;2.60;35.81;5.25.72

Jaana Lind;13.75;4.84;10.12;1.50;68.44;19.18;30.85;2.80;33.88;6.22.75

public class AthleticCompetitionResults {
  private Athletic athletic;
  private float resultM100;
  private float resultLongJump;
  private float resultShotPut;
  private float resultHighJump;
  private float resultM400;
  private float resultHurdles110m;
  private float resultDiscusThrow;
  private float resultPoleVault;
  private float resultJavelinThrow;
  private float resultM1500;
  private int points;


public AthleticCompetitionResults(Athletic athletic) {
    this.athletic = athletic;
}

public void countPoints(){
   //counting
}

// setters and getters
...

已编辑:
我的目标是打印 List<AthleticCompetitionResults> 的列表按积分排序并打印比赛地点。如果 points 等于打印 1-2地方。示例:

1-2 Siim Susi 4200 pts
1-2 Siim Susi2 4200 pts
3 Jaana Lind 3494 pts

保存田径比赛 field 的最佳方法是什么?怎么样List<Integer>' places in class 'AthleticCompetitionResults

public class Competition{
  private List<AthleticCompetitionResults> athleticsData;
  
  public Competition(List<AthleticCompetitionResults> data){
     this.athleticsData = data;
  }

  public void sortByPoints(){
   //sorting by points
  }

  public void setPlaces(){
    //setting athletics places in competition by points
  }

  public void print(){
     //printing e.g 1-2 Siim Susi 4200 pts ...
  }
}

最佳答案

考虑:

并非所有事件都会按时发生

  • 例如摔跤、射击)

结果取决于事件类型

  • 冲刺有完成时间和排名
  • 摔跤有赢家/输家

某些事件组的结果属性相似

  • 100m 短跑、500m 短跑、游泳、马拉松都有完成时间。

  • 标枪,铅球,讨论 throw 距离。

  • 所有事件都有明确的赢家

我们需要一个策略,以便根据事件类型,我们的结果属性可以改变。

让我们试着写下它的一些示例代码:

class Result {
  protected boolean winner;
  ..
};

class ThrowingResult extends Result{
  protected float range;
  ..
}

class SprintResult extends Result{
  protected double timeToFinishInMilliseconds;
  protected int finalPosition;
  ..
}

class AthleticCompetitionResults{
  private Athletic athletic;

  private SprintResult resultM100;
  private SprintResult resultLongJump;

  private ThrowingResult javelin;
  private ThrowingResult shotPut;

  private Result wrestling;
  ...
}

关于java - 我应该使用哪种设计模式来按积分设置比赛 field ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537928/

相关文章:

c# - 将用例封装在软件中

javascript - 如果大部分功能的执行以输入为条件,那么哪一个是更好的实现方式?

java继承和设计模式建议

mysql - 数据库应用和远程MySql

java - 了解 Java 中的对象反射优势

java - testng 在一个线程中运行所有测试类

java - 如何将 for 循环数组值设置为 bean

c - 具有一些私有(private)操作的不透明结构

model-view-controller - 新的web项目设计模式规范

java - 有没有一种快速的方法来重构整个代码库以采用不同的代码约定?