Strategyパターンの解説

Strategyパターンとは、アルゴリズムをカプセル化し、必要に応じて切り替えることができるデザインパターンだ。これにより、動的に異なるアルゴリズムを使い分けることができる。

たとえば、キャラクターの攻撃方法を「剣」「魔法」「弓」などで動的に切り替える場面で使える。

では、サンプルコードを一緒に見ていこう。

解説

例えば、ゲームでキャラクターが異なる攻撃方法を選ぶ場合、Strategyパターンを使うことで柔軟に攻撃方法を切り替えることができる。

Step 1: キャラクターの基本クラスを作る

まず、ゲームのキャラクタークラスを作ろう。このキャラクターには、異なる攻撃方法を選べるようにしていくよ。


// キャラクタークラス
class Character {
  constructor() {
    this.attackStrategy = null; // 攻撃方法を後で設定する
  }

  setAttackStrategy(strategy) {
    this.attackStrategy = strategy; // 攻撃方法を設定する
  }

  attack() {
    this.attackStrategy.attack(); // 設定した攻撃方法を実行する
  }
}
      

Step 2: いくつかの攻撃方法を作る

次に、キャラクターが使える攻撃方法をいくつか作成しよう。それぞれ異なる戦略(Strategy)で攻撃するよ。


// 剣で攻撃する戦略
class SwordAttack {
  attack() {
    console.log("剣で攻撃しました!");
  }
}

// 弓で攻撃する戦略
class BowAttack {
  attack() {
    console.log("弓で攻撃しました!");
  }
}

// 魔法で攻撃する戦略
class MagicAttack {
  attack() {
    console.log("魔法で攻撃しました!");
  }
}
      

Step 3: 攻撃方法を切り替えて実行する

キャラクターに攻撃方法を設定して、実際に攻撃を実行してみよう。Strategyパターンを使うことで、柔軟に攻撃方法を切り替えることができる。


// キャラクターを作成
const character = new Character();

// 剣で攻撃
character.setAttackStrategy(new SwordAttack());
character.attack(); // 結果: 剣で攻撃しました!

// 弓で攻撃
character.setAttackStrategy(new BowAttack());
character.attack(); // 結果: 弓で攻撃しました!

// 魔法で攻撃
character.setAttackStrategy(new MagicAttack());
character.attack(); // 結果: 魔法で攻撃しました!
      

Strategyパターンの重要なポイント

これでStrategyパターンの解説は終わりだ。
このパターンを使うと、異なるアルゴリズムを簡単に切り替えることができるため、柔軟な動作を求められる場面で便利だ。