4

すべてのコマンドをコンテナにロードしてコマンドを 1 つずつ実行できるのに、責任の連鎖を使用する必要があるのはなぜですか。これにより、リクエストを連続して処理するチェーンが作成されます。ところで、特定のコマンドを削除したり、実行時に別のコマンドに置き換えたりできるため、CoR よりも優れていると思いますが、CoR の場合は、チェーン内の要素にアクセスできないため、チェーン内の何かを変更するために別のチェーンを作成する必要があります。最初の要素を除くチェーン。(実際には、これは単一の連結リストです。)

4

1 に答える 1

0

「ばかげたことをシンプルに保つ」ためだけに:-)

特に必要なときにキュー/スタックを作成すると、いつ必要になるかがわかりますね。

たとえば、次のような単純なデータ操作を行う必要がある場合:

data.clean().format().save(); 

commands.push(new Cleaner(data));
commands.push(new Formatter(data));
commands.push(new Updates(data));
commands.execute();

また、新しいデータ構造 (コマンド スタック) を作成するために、さらにコードを記述する必要があることにも注意してください。

しかし、それがより戦略的なものであったとしましょう。たとえば、シューティング ゲームです。プレイヤーは撃たれたり、殺されたりする可能性があり、結果は選択したゲームの難易度によって異なります。

headShot = new Command();
headShot.push(new FreezePlayer());
headShot.push(new BleedPlayer());
headShot.push(new KillPlayer());

bodyShot = new Command();
headShot.push(new FreezePlayer());
headShot.push(new BleedPlayer());
headShot.push(new LooseHealth());

player.onHit = function(hitPoint){
    hitPoint.aboveNeck() ? headShot.on(this) : bodyShot.on(this);
};

この場合、渡されて実行時に発生する戦略を作成する必要があることに注意してください。

そのため、イージー モードの場合、bodyShot には最後の要素 (LooseHealth) がなく、headShot には最後の要素として KillPlayer ではなく LooseHealth が含まれる場合があります。

それが役に立てば幸い。

于 2015-09-11T12:01:29.080 に答える