C#上級

上級 C#で実装するデザインパターン実践集|練習問題編

導入

デザインパターンは、ソフトウェア開発において再利用可能なソリューションを提供します。特に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

コードの行ごとの解説

  1. IStrategyインターフェース: すべての戦略が実装すべきメソッドを定義します。
  2. Additionクラス: 加算の具体的な戦略を実装します。
  3. Subtractionクラス: 減算の具体的な戦略を実装します。
  4. Contextクラス: 現在の戦略を保持し、戦略を切り替えるためのメソッドを提供します。
  5. 使用例: Contextクラスを利用して、動的に異なる戦略を適用しています。

練習問題編

以下の問題を解いて、ストラテジーパターンの理解を深めてください。

  1. 問題1: 乗算の戦略クラスを実装し、Contextクラスで使用して結果を出力してください。
  2. 問題2: ストラテジーパターンの利点を2つ挙げ、それぞれ説明してください。
  3. 問題3: Contextクラスに戦略を変更するメソッドを追加し、戦略を変更した後に出力するように修正してください。

まとめ

  • ストラテジーパターンは、アルゴリズムの切り替えを柔軟に行うための強力な手法です。
  • 具体的なシチュエーションに応じて、戦略を変更できることで、コードの再利用性が向上します。
  • 実際の業務において、デザインパターンを適切に活用することが、開発の効率化につながります。