可配置系统的设计模式

Joh*_*aum 14 java sorting design-patterns

我有一个有趣的设计问题,我将尝试简化下面的玩具问题:

我希望设计一个系统,根据某些输入和中间处理,输出将是学生对象.流程如下:我有一个教室列表作为一种输入.要生成输出,处理步骤是:

  1. 由X岁以下的学生过滤每个教室(比方说10)
  2. 通过此分层顺序的任何排列对筛选结果进行排序:高度,重量,臂长
  3. 返回前8名学生.

另一个输入可以只是我已经拥有的学生列表,并希望作为结果的一部分包含在内.例如:输入1:3名学生的列表,输入2:将运行上述处理步骤的2个教室的列表.

设计这样一个系统的最佳方法是输入:

  • 输入类型{student list|classroom list},
  • 过滤器类型{age|height|etc},
  • 排序顺序{any ordering of height,weight,arm length},
  • returnNum{how many students to return}

系统应足够灵活,以容纳更多输入类型和更多排序顺序条目{即.按鞋码分类学生}.我可以使用什么数据结构来模拟本节的每个部分(即,表示排序顺序标准的最佳方式是什么?)是否有适合这些需求的设计模式?任何建筑设计的帮助将不胜感激!

Edw*_*rzo 7

那么,您建议的内容可以通过Java 8流轻松完成,因此我猜您可以遵循的一种模式是管道.您也可以使用内部迭代器来实现它:

List<Student> found = Stream.of(student1, student2, student3, ..., studentn)
    .filter(s -> s.getAge() > 100)
    .sorted(Comparator.comparing(Student::getHeight).thenComparing(Student::getWeight))
    .limit(10)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)