2

ノードのリストというリストオブジェクトがあります。ユーザーに「その場での並べ替え/順序付け」を提供したい。ユーザーは、リスト内の任意の場所に項目を配置できます。この動作全体をパッケージ (オブジェクトなど) として保持し、並べ替えモードが必要なときに一時的に借りることができる設計パターンはありますか?

私はJavascriptでこれをやっています。

デコレーターを考えましたが、元のオブジェクトのプロパティを変更する必要があります。それを行う正しい方法のように感じませんでした。デコレーターは、元のオブジェクトを変更せずに機能を追加することを想定しています。

新しい詳細:

私がやろうとしていることについて、より良いアナロジーがあります。ゲームのキャラクターを考えてみましょう。キャラクターはゲームが生き残るまで生きます。キャラクターはいくつかの役割を担うことができます。役割は、永続的なキャラクターのプロパティを変更できます。キャラクターは、1 つ以上の役割を 1 回以上引き受けることができます。プログラムの「キャラクター」と「役割」をどのように構成するか。

Role が Character のデコレータのようなものである場合、Character のプライベート プロパティを Role で変更することは良い方法ですか? その他の方法で?

4

1 に答える 1

0

一般的なアプローチとして、リンク リストを使用できます。各ノードについて、その後に続くノードを保持する必要があります。また、最初のノードの参照を保持する必要があります。

  • ユーザーがノード A を最初のノードと最後のノードの間のどこかに移動した場合、ノード A の下のノード (ノード B) を見つけて、ノード B をノード A の次のノードとして設定します。

  • ユーザーがノードをリストの最後に移動した場合、次のノードを に設定しますnull

  • ユーザーがノードをリストの先頭に移動すると、最初のノード参照が更新されます。

最後に、ユーザーが変更を保存したら、最初のノードから再帰関数を使用して、アイテムの順序付きリストを作成します。

元のオブジェクトを実際に変更する必要はないことに注意してください。Node オブジェクトは次のように単純に見えるはずです。

function Node(item, nextNode) {
    this.item = item;
    this.nextNode = nextNode;
}

Node.prototype.getItem = function () {
    return this.item;
};

Node.prototype.getNextNode = function () {
    return this.nextNode;
};

Node.prototype.setNextNode = function (node) {
    this.nextNode = node;
}

itemプロパティは、元のオブジェクトを保持できます。

于 2013-08-23T00:41:01.087 に答える