JavaScriptでのコマンドパターンの実装 – JavaScriptで始めるプログラミング

JavaScriptでのコマンドパターンの実装 – JavaScriptで始めるプログラミング

コマンドパターンは、ソフトウェアデザインパターンの一つです。これは、コマンドとしての要求をカプセル化し、パラメータ化することで、要求のためのオブジェクトを作成するパターンです。さらに、クライアントとリクエスター間の疎結合性を確保するために役立ちます。次に、JavaScriptでの具体的な実装方法を見てみましょう。

コマンドパターンの基本構造

まず、コマンドパターンの基本構造を理解しましょう。以下に示す構造は、受信者コマンド、および呼び出し元 (Invoker) から成り立っています。

  • 受信者 (Receiver) – 実際にアクションを実行するオブジェクト
  • コマンド (Command) – 実行されるアクションを表すオブジェクト
  • 呼び出し元 (Invoker) – コマンドを呼び出すオブジェクト

実装例

例として、シンプルな実装を示します。この例では、電気をオン/オフするコマンドを考えます。

class Light {
    on() {
        console.log('ライトがオンになりました');
    }
    off() {
        console.log('ライトがオフになりました');
    }
}
class Command {
    execute() {}
}
class LightOnCommand extends Command {
    constructor(light) {
        super();
        this.light = light;
    }
    execute() {
        this.light.on();
    }
}
class LightOffCommand extends Command {
    constructor(light) {
        super();
        this.light = light;
    }
    execute() {
        this.light.off();
    }
}
class Invoker {
    constructor() {
        this.commands = [];
    }
    addCommand(command) {
        this.commands.push(command);
    }
    executeCommands() {
        this.commands.forEach((command) => command.execute());
    }
}
// 使用例
const light = new Light();
const lightOn = new LightOnCommand(light);
const lightOff = new LightOffCommand(light);
const invoker = new Invoker();
invoker.addCommand(lightOn);
invoker.addCommand(lightOff);
invoker.executeCommands();

コードの説明

このコードでは、Lightクラスが受信者であり、onoffのメソッドを持っています。Commandクラスは抽象クラスであり、executeメソッドを定義しています。

また、LightOnCommandおよびLightOffCommandクラスが具体的なコマンドクラスとなり、Lightインスタンスを受け取り、executeメソッドでそれぞれonおよびoffメソッドを呼び出します。呼び出し元であるInvokerクラスでは、コマンドのリストを保持し、executeCommandsメソッドで全てのコマンドを実行します。

まとめ

JavaScriptでのコマンドパターンの実装は、比較的シンプルですが非常に柔軟で拡張性があります。これにより、異なる要求をカプセル化し、簡単に追加や変更ができるようになります。さらに、このパターンを使用することで、コードの再利用性を高めることができます。ぜひ、プロジェクトに取り入れてみてください。

コメントを残す