比較関数やベクトル和など、2 つのオブジェクトを引数とする関数を作成する場合、どのような設計パターンが適していますか?
1) オブジェクト クラス内に関数を記述し、2 番目のオブジェクトのみを取得します。
2) 両方のオブジェクトを取得する静的関数を持つ外部クラスを作成します。
なぜ、いつ?
比較関数やベクトル和など、2 つのオブジェクトを引数とする関数を作成する場合、どのような設計パターンが適していますか?
1) オブジェクト クラス内に関数を記述し、2 番目のオブジェクトのみを取得します。
2) 両方のオブジェクトを取得する静的関数を持つ外部クラスを作成します。
なぜ、いつ?
Java ではComparable.compareTo(o1)
、1 つのオブジェクトに代わって実行され、2 番目のオブジェクトを引数として受け取ります。
apple.compareTo(orange);
Comparator.compare(o1,o2)
抽象化もあります:
comparator.compare(apple, orange);
それらのどれも非推奨ではなく、どれも優れているとは見なされません。どちらもさまざまなシナリオで使用されます。
Fruit
クラス内に配置しますそれらを組み合わせることもできFruit
ます。デフォルトの順序が適切である限り、デフォルトの順序 ( 内にエンコードされます) です。ある日、別の注文が必要になった場合は、特定のコンパレータを選択してください。
これは、他の同様の状況や言語にも当てはまると思います。
私見、.NET のバックグラウンドから来ています。いずれかのオブジェクトが null である可能性がある場合は、静的メソッドを使用してください。
最初 (左のオブジェクト) が非 null にバインドされ、継承クラスが等価メソッドの独自の実装を提供できるようにしたい場合は、インスタンス メソッドを使用します。