在条件值列表中选择组的最佳设计模式可能会有所不同?

时间:2019-01-31 15:12:22

标签: java design-patterns

public class Swimmers extends SwimmersPrototype{
    List<Swimmer> swimmers;
    SortStrategy sortStrategy;

    public Swimmers() {
        swimmers = new ArrayList();
    }

    @Override
    public SwimmersPrototype clone() throws CloneNotSupportedException{
        Swimmers swp = (Swimmers)super.clone();
        return swp;
    }

    public void setSortStrategyAndSort(SortStrategy s) {
        setSortStrategy(s);
        sort();
    }

    public void setSortStrategy(SortStrategy s){
        sortStrategy = s;
    }

    public void addSwimmer(Swimmer s){
        swimmers.add(s);
    }

    public List<Swimmer> sort() {
        return (swimmers = sortStrategy.sort(new ArrayList<>(swimmers)));
    }

    public List<Swimmer> getSwimmers() {
        return swimmers;
    }
}

我已经将Swimmers类用作Swimmer记录的内存数据库。我有三张桌子,一张显示游泳者的清单,第二张显示只有18-25岁的游泳者,最后一张列出只有26-35岁的游泳者。

游泳运动员班级具有年龄属性,但是游泳运动员的年龄可能会发生变化,并可能导致另一个年龄组,例如,如果John 25岁并在比赛中庆祝生日,则他必须属于第二组。

那么在这里,哪种设计模式最好根据列表中的某个条件来选择一个组,条件的值也可能会有所不同,从而导致组中的变化?

1 个答案:

答案 0 :(得分:3)

为每种情况创建一个Predicate

Predicate<Integer> youngSwimmer = integer -> integer > 18 && integer < 25;
Predicate<Integer> oldSwimmer = integer -> integer > 26 && integer < 35;

然后像这样测试它:

List<Swimmer> = getSwimmers().stream()
    .filter(swimmer -> youngSwimmer.test(swimmer.getAge()))
    .collect(Collectors.toList())

您可以为此定义一个单独的方法,并传递需要获取特定年龄游泳者列表的任何谓词