当按照以下方式将比较器应用到列表时,使用的是什么设计模式或这里使用的是什么技术?
Collections.sort(myCollection, new Comparator<MyItem>() {
@Override
public int compare(MyItem item1, MyItem item2) {
return item1.getId().compareTo(item2.getId());
}
});
当按照以下方式将比较器应用到列表时,使用的是什么设计模式或这里使用的是什么技术?
Collections.sort(myCollection, new Comparator<MyItem>() {
@Override
public int compare(MyItem item1, MyItem item2) {
return item1.getId().compareTo(item2.getId());
}
});
TL;DR:
Collections.sort
是一个简单的多态替换示例,无论您是使用函数式编程还是面向对象编程进行此替换。术语策略模式不能与多态或函数式编程互换使用。
可以说我们仍在将排序策略
传递给sort
方法,但是没有Context
,它不等同于策略模式。
支持材料
让我们从GoF中了解一下策略模式的定义:
现在应该清楚了,多态和策略模式之间有微妙的区别。 策略模式讨论了一个上下文,如上面加粗所示,使用组合。将算法封装在对象中是策略(315)模式的意图。模式中的关键参与者是策略对象(它们封装不同的算法)以及它们所操作的上下文。组合器是策略;它们封装不同的格式化算法。组合是组合器策略的上下文。
....
对象组合提供了一个可能更可行和灵活的扩展机制。
Collections
类不与比较器建立组合关系。此外,策略模式的class diagram显示了一个称为上下文的组件,它组成了策略接口。
这个问题被标记为OOP,但如果我们想谈论当涉及到函数式编程范例时Collections.sort
代表什么模式,我会说它代表函数式编程。(如果我必须将将函数传递给方法等同于OOP模式,我会说它与命令模式更相似(而非完全类似)于策略模式)
相关内容: 函数式编程是否可以替代GoF设计模式?