導入
デザインパターンは、ソフトウェア開発において再利用可能なソリューションを提供します。特にC#のようなオブジェクト指向言語では、これらのパターンを適切に実装することで、コードの可読性や保守性が大幅に向上します。本記事では、現場でよく遭遇する具体的なシチュエーションを通じて、デザインパターンの実践的な使い方を探ります。
教科書レベルの解説(デザインパターン実践)
重要な概念の整理
デザインパターンには、クリエイショナル、ストラクチュラル、ビヘイビオラルの3つのカテゴリがあります。ここでは、ビヘイビオラルパターンに焦点を当て、特に「ストラテジーパターン」を取り上げます。このパターンは、アルゴリズムの選択をクライアントから切り離し、動的にアルゴリズムを変更できる柔軟性を提供します。
コード例(C#)
// ストラテジーパターンの実装
public interface IStrategy
{
int Execute(int a, int b);
}
public class Addition : IStrategy
{
public int Execute(int a, int b) => a + b;
}
public class Subtraction : IStrategy
{
public int Execute(int a, int b) => a - b;
}
public class Context
{
private IStrategy _strategy;
public void SetStrategy(IStrategy strategy)
{
_strategy = strategy;
}
public int ExecuteStrategy(int a, int b)
{
return _strategy.Execute(a, b);
}
}
// 使用例
var context = new Context();
context.SetStrategy(new Addition());
Console.WriteLine(context.ExecuteStrategy(5, 3)); // 出力: 8
context.SetStrategy(new Subtraction());
Console.WriteLine(context.ExecuteStrategy(5, 3)); // 出力: 2
コードの行ごとの解説
- IStrategyインターフェース: すべての戦略が実装すべきメソッドを定義します。
- Additionクラス: 加算の具体的な戦略を実装します。
- Subtractionクラス: 減算の具体的な戦略を実装します。
- Contextクラス: 現在の戦略を保持し、戦略を切り替えるためのメソッドを提供します。
- 使用例: Contextクラスを利用して、動的に異なる戦略を適用しています。
練習問題編
以下の問題を解いて、ストラテジーパターンの理解を深めてください。
- 問題1: 乗算の戦略クラスを実装し、Contextクラスで使用して結果を出力してください。
- 問題2: ストラテジーパターンの利点を2つ挙げ、それぞれ説明してください。
- 問題3: Contextクラスに戦略を変更するメソッドを追加し、戦略を変更した後に出力するように修正してください。
まとめ
- ストラテジーパターンは、アルゴリズムの切り替えを柔軟に行うための強力な手法です。
- 具体的なシチュエーションに応じて、戦略を変更できることで、コードの再利用性が向上します。
- 実際の業務において、デザインパターンを適切に活用することが、開発の効率化につながります。