1

私はクラス図を設計していますが、並べ替えロジックの使用方法がわかりません。

要件:並べ替えロジックは次のようになります

  1. フィールド1で並べ替え
  2. field2で並べ替え
  3. field1 + field2 + field3で並べ替えると、さらに多くの場合があります。![ここに画像の説明を入力してください] [1]

解決策考えられるすべてのロジックのクラスとその上のインターフェイスを作成することを考えています。

戦略またはファクトリのどちらのパターンを使用する必要がありますか。

これで私を助けてください

4

3 に答える 3

1

これには、戦略パターンまたは訪問者パターンが最適です。この要件は非常に一般的であるため、クラス図について十分な知識がある人は誰でもここにアップロードできることをお勧めします

于 2012-04-12T08:50:13.880 に答える
1

戦略パターンはここが最適です。ウィキペディアの記事は参考にはなりますが、初心者向けの記事ではありません。

簡単に言えば (インターフェイス、型チェックなどを無視して)、潜在的な並べ替えアルゴリズムごとに個別のクラスを作成し、並べ替えクラスの 1 つのインスタンスをオブジェクトのコンストラクターに渡して使用できるようにします。次に、メイン クラスは、次のように、渡されたソーターに並べ替えアクションを委任します。

class mainthing {

    public function __construct($sorter) {
        $this->sorter = $sorter;
    }

    public function sort($stufftosort) {
        return $this->sorter->sort($stufftosort);
    }

}

class sorter {
    public function sort($stufftosort) {
        // sorting code here
    }

}

class differentsorter {
    public function sort($stufftosort) {
        // different sorting code here
    }

}

$thing = new mainthing(new sorter());
$thing->sort($somestuff);
$otherthing = new mainthing(new differentsorter());
$otherthing->sort($somestuff);

厳密な継承階層に縛られるのではなく、さまざまな動作を組み合わせて一致させることができるという考え方です。並べ替えだけでなく、これらのクラスについて異なる必要がある他のものがあるかもしれません-その機能を提供できるオブジェクトをコンストラクターに渡すことで同じことを行うだけです。

于 2012-04-12T10:16:55.740 に答える
0

ここで考慮すべき点が 2 つあります。並べ替えアルゴリズム自体と比較関​​数です。あなたは、並べ替えアルゴリズムがリストを並べ替えるために使用する、リスト内の2つの項目を比較する方法を知っている一種の戦略である比較関数を求めているようです。

したがって、概念的な観点からは、パラメーター間の比較結果を返すComparatorメソッドとのインターフェイスが必要です。compare(a, b)このインターフェイスは単純なので、ほとんどの場合、コールバック関数で十分です。usort関数の例を見てみましょう。

于 2012-04-12T12:57:49.807 に答える