Strategyパターンとは、アルゴリズムをカプセル化し、必要に応じて切り替えることができるデザインパターンだ。これにより、動的に異なるアルゴリズムを使い分けることができる。
たとえば、キャラクターの攻撃方法を「剣」「魔法」「弓」などで動的に切り替える場面で使える。
では、サンプルコードを一緒に見ていこう。
例えば、ゲームでキャラクターが異なる攻撃方法を選ぶ場合、Strategyパターンを使うことで柔軟に攻撃方法を切り替えることができる。
まず、ゲームのキャラクタークラスを作ろう。このキャラクターには、異なる攻撃方法を選べるようにしていくよ。
// キャラクタークラス
class Character {
constructor() {
this.attackStrategy = null; // 攻撃方法を後で設定する
}
setAttackStrategy(strategy) {
this.attackStrategy = strategy; // 攻撃方法を設定する
}
attack() {
this.attackStrategy.attack(); // 設定した攻撃方法を実行する
}
}
次に、キャラクターが使える攻撃方法をいくつか作成しよう。それぞれ異なる戦略(Strategy)で攻撃するよ。
// 剣で攻撃する戦略
class SwordAttack {
attack() {
console.log("剣で攻撃しました!");
}
}
// 弓で攻撃する戦略
class BowAttack {
attack() {
console.log("弓で攻撃しました!");
}
}
// 魔法で攻撃する戦略
class MagicAttack {
attack() {
console.log("魔法で攻撃しました!");
}
}
キャラクターに攻撃方法を設定して、実際に攻撃を実行してみよう。Strategyパターンを使うことで、柔軟に攻撃方法を切り替えることができる。
// キャラクターを作成
const character = new Character();
// 剣で攻撃
character.setAttackStrategy(new SwordAttack());
character.attack(); // 結果: 剣で攻撃しました!
// 弓で攻撃
character.setAttackStrategy(new BowAttack());
character.attack(); // 結果: 弓で攻撃しました!
// 魔法で攻撃
character.setAttackStrategy(new MagicAttack());
character.attack(); // 結果: 魔法で攻撃しました!
これでStrategyパターンの解説は終わりだ。
このパターンを使うと、異なるアルゴリズムを簡単に切り替えることができるため、柔軟な動作を求められる場面で便利だ。