3

比較関数やベクトル和など、2 つのオブジェクトを引数とする関数を作成する場合、どのような設計パターンが適していますか?

1) オブジェクト クラス内に関数を記述し、2 番目のオブジェクトのみを取得します。

2) 両方のオブジェクトを取得する静的関数を持つ外部クラスを作成します。

なぜ、いつ?

4

2 に答える 2

3

Java ではComparable.compareTo(o1)、1 つのオブジェクトに代わって実行され、2 番目のオブジェクトを引数として受け取ります。

apple.compareTo(orange);

Comparator.compare(o1,o2)抽象化もあります:

comparator.compare(apple, orange);

それらのどれも非推奨ではなく、どれも優れているとは見なされません。どちらもさまざまなシナリオで使用されます。

  • 果物の固定された自然な「順序」がある場合は、Fruitクラス内に配置します
  • 果物を(サイズ、重量、色、味)で比較する方法が複数ある場合は、いくつかの比較器を用意して、一度に必要なものを使用してください。

それらを組み合わせることもできFruitます。デフォルトの順序が適切である限り、デフォルトの順序 ( 内にエンコードされます) です。ある日、別の注文が必要になった場合は、特定のコンパレータを選択してください。

これは、他の同様の状況や言語にも当てはまると思います。

于 2012-08-28T19:16:49.863 に答える
0

私見、.NET のバックグラウンドから来ています。いずれかのオブジェクトが null である可能性がある場合は、静的メソッドを使用してください。

最初 (左のオブジェクト) が非 null にバインドされ、継承クラスが等価メソッドの独自の実装を提供できるようにしたい場合は、インスタンス メソッドを使用します。

于 2012-08-28T19:15:28.050 に答える