次のようにコンパレータをリストに適用する場合、使用されているデザインパターンは何ですか、またはここで使用されている手法は何ですか?
Collections.sort(myCollection, new Comparator<MyItem>() {
@Override
public int compare(MyItem item1, MyItem item2) {
return item1.getId().compareTo(item2.getId());
}
});
Collections.sort()は Strategy パターンを使用します。
最初に別の形を見てみたほうがいいと思います
Collections.sort(myCollection)
これは、実行時にアイテムを比較するためのアルゴリズムを取得しません。このアプローチでは、アイテムの継承によって提供されるアルゴリズムを使用します(Comparableインターフェイスを実装することによって)。簡単な方法ではありませんが、これを少し柔軟に見ると、これはテンプレートパターンです。このアプローチは継承を使用し、アイテムの動作は実行時に変更できません。
しかし、2番目の形式では
Collections.sort(myCollection、comparing-algorithm)
テンプレートパターン(継承)とは異なり、実行時に動作を送信します。これは、実行時に提供される変更可能な動作を使用する場合に可能です。これは戦略パターンの最も重要な部分です。
戦略パターンの構成部分はどこにあるのかと誰かが尋ねるかもしれません。構成は、アルゴリズムを保持するだけのものではないため、必要なときにいつでも使用できます。ただし、この場合、Collectionsクラスはさまざまな目的で使用されるUtilsクラスであり、元のバージョンのStrategy Patternに表示されるContextクラスではないため、アルゴリズムが必要な場合は常に引数として渡されます。