评分/排名专辑的Java模式

评分/排名专辑的Java模式,java,algorithm,design-patterns,Java,Algorithm,Design Patterns,我正在建立一个相对简单的算法,根据几个标准对专辑进行评分——例如,收听次数、音频质量、明星评论、专辑艺术品的存在等。我正在尝试确定该算法的最佳设计模式,我喜欢输入。现在,我觉得建筑商最好解决这个问题 以下是一些更详细的信息: 根据使用记分器的服务,最终用户可以选择包括或排除哪些标准。例如,一个服务可能需要考虑星级评论,而不同的服务可能不想基于星级评论得分。最终,应该由用户根据自己的意愿构建计分器 条件的输入范围从int到String,再到boolean和其他类型 每个专辑的分数都是计算出来的。其

我正在建立一个相对简单的算法,根据几个标准对专辑进行评分——例如,收听次数、音频质量、明星评论、专辑艺术品的存在等。我正在尝试确定该算法的最佳设计模式,我喜欢输入。现在,我觉得建筑商最好解决这个问题

以下是一些更详细的信息:

  • 根据使用记分器的服务,最终用户可以选择包括或排除哪些标准。例如,一个服务可能需要考虑星级评论,而不同的服务可能不想基于星级评论得分。最终,应该由用户根据自己的意愿构建计分器
  • 条件的输入范围从int到String,再到boolean和其他类型
  • 每个专辑的分数都是计算出来的。其他专辑不会影响专辑的分数
  • 必须包括一些基线标准。例如,记分员至少必须使用监听计数和音频质量。如第一点所述,在这些最低标准之上,用户可以包括其他标准
  • 算法的输入是一个相册及其附带的数据:[相册、收听次数、音频质量、明星评论等]

  • Builder模式在这里似乎应用得最好,因为它允许用户在避免伸缩的同时构建自己的算法。思想?是否有其他的模式我应该考虑包括构造器?< /p> 假设你需要的各种标准的数据包含在相册数据中,每个标准都有助于整体评分,我建议把每个标准转换成java函数,把一张专辑转换成分数。然后,对于所有选定的条件,在相册上运行“条件”函数,并将单个结果合并为一个分数。然后,您可以将标准转换为枚举,这样可以很容易地将所选标准传递到评分函数中


    如果每个标准都不相等,您还可以返回一个权重因子(例如,star review的重要性可能是listen count的两倍),使给定标准的贡献为(分数*权重)/权重之和

    这里有两个设计问题:构建计分器和应用计分器。这些问题为几种设计模式提供了机会

    Builder可能是第一个问题的合适解决方案,具体取决于计分员本身的复杂性。第二个问题是一个明确的用例(来自@V3V的答案也在描述)。每个“记分员”都是一个算法;策略模式是可替代算法的设计。算法的基线标准可以使用一个标准来实现