web-dev-qa-db-ja.com

Collections.sortはどのようなデザインパターンを使用していますか?

次のようにコンパレータをリストに適用する場合、使用されているデザインパターンは何ですか、またはここで使用されている手法は何ですか?

Collections.sort(myCollection, new Comparator<MyItem>() {

    @Override
    public int compare(MyItem item1, MyItem item2) {
        return item1.getId().compareTo(item2.getId());
    }

});
11
Dinesh Kumar

Collections.sort()は Strategy パターンを使用します。

3
Parviz Makari

最初に別の形を見てみたほうがいいと思います

Collections.sort(myCollection)

これは、実行時にアイテムを比較するためのアルゴリズムを取得しません。このアプローチでは、アイテムの継承によって提供されるアルゴリズムを使用します(Comparableインターフェイスを実装することによって)。簡単な方法ではありませんが、これを少し柔軟に見ると、これはテンプレートパターンです。このアプローチは継承を使用し、アイテムの動作は実行時に変更できません。

しかし、2番目の形式では

Collections.sort(myCollection、comparing-algorithm)

テンプレートパターン(継承)とは異なり、実行時に動作を送信します。これは、実行時に提供される変更可能な動作を使用する場合に可能です。これは戦略パターンの最も重要な部分です。

戦略パターンの構成部分はどこにあるのかと誰かが尋ねるかもしれません。構成は、アルゴリズムを保持するだけのものではないため、必要なときにいつでも使用できます。ただし、この場合、Collectionsクラスはさまざまな目的で使用されるUtilsクラスであり、元のバージョンのStrategy Patternに表示されるContextクラスではないため、アルゴリズムが必要な場合は常に引数として渡されます。

1
hyeganeh