導入
デザインパターンは、ソフトウェア開発において再利用可能な解決策を提供します。特にC#のようなオブジェクト指向言語では、これらのパターンを適切に適用することで、コードの可読性や保守性を向上させることが可能です。本記事では、実務で遭遇しやすいシナリオに基づいたデザインパターンの適用方法を考察し、練習問題を通じて理解を深めます。
教科書レベルの解説(デザインパターン)
重要な概念の整理
デザインパターンには、生成パターン、構造パターン、振る舞いパターンの3つのカテゴリがあります。生成パターンはオブジェクトの生成に関する問題を解決し、構造パターンはオブジェクトの組織化に関するもの、振る舞いパターンはオブジェクト間の通信に焦点を当てています。今回は振る舞いパターンの一つである「ストラテジーパターン」を取り上げ、具体的な実装例を示します。
コード例(C#)
// ストラテジーパターンの実装例
public interface IStrategy
{
void Execute();
}
public class ConcreteStrategyA : IStrategy
{
public void Execute()
{
Console.WriteLine("Strategy A executed.");
}
}
public class ConcreteStrategyB : IStrategy
{
public void Execute()
{
Console.WriteLine("Strategy B executed.");
}
}
public class Context
{
private IStrategy _strategy;
public Context(IStrategy strategy)
{
_strategy = strategy;
}
public void SetStrategy(IStrategy strategy)
{
_strategy = strategy;
}
public void ExecuteStrategy()
{
_strategy.Execute();
}
}
コードの行ごとの解説
- IStrategyインターフェース: すべてのストラテジーが実装すべきメソッドを定義。
- ConcreteStrategyAおよびConcreteStrategyB: 異なるアルゴリズムを提供する具体的なストラテジーの実装。
- Contextクラス: ストラテジーを保持し、実行するクラス。ストラテジーの変更が可能。
- ExecuteStrategyメソッド: 現在設定されているストラテジーのExecuteメソッドを呼び出す。
練習問題編
以下の練習問題に取り組んで、ストラテジーパターンの理解を深めてください。
- 問題1: 新しいストラテジーとして「ConcreteStrategyC」を実装し、実行結果を表示するコードを追加してください。
- 問題2: Contextクラスに、ストラテジーをランダムに選択するメソッドを追加してください。
- 問題3: ストラテジーを変更する際に、現在のストラテジーの状態を保存し、後で復元できるようにしてください。
まとめ
- ストラテジーパターンは、アルゴリズムをクラスとして分離し、柔軟性を持たせる手法。
- 具体的なシナリオに応じてストラテジーを変更することで、コードの再利用性を高めることが可能。
- 練習問題を通じて、実際の業務における適用例を考える機会を持つことが重要。