C#上級

上級 C#で学ぶデザインパターン|練習問題編

導入

デザインパターンは、ソフトウェア開発において再利用可能な解決策を提供します。特に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();
    }
}

コードの行ごとの解説

  1. IStrategyインターフェース: すべてのストラテジーが実装すべきメソッドを定義。
  2. ConcreteStrategyAおよびConcreteStrategyB: 異なるアルゴリズムを提供する具体的なストラテジーの実装。
  3. Contextクラス: ストラテジーを保持し、実行するクラス。ストラテジーの変更が可能。
  4. ExecuteStrategyメソッド: 現在設定されているストラテジーのExecuteメソッドを呼び出す。

練習問題編

以下の練習問題に取り組んで、ストラテジーパターンの理解を深めてください。

  1. 問題1: 新しいストラテジーとして「ConcreteStrategyC」を実装し、実行結果を表示するコードを追加してください。
  2. 問題2: Contextクラスに、ストラテジーをランダムに選択するメソッドを追加してください。
  3. 問題3: ストラテジーを変更する際に、現在のストラテジーの状態を保存し、後で復元できるようにしてください。

まとめ

  • ストラテジーパターンは、アルゴリズムをクラスとして分離し、柔軟性を持たせる手法。
  • 具体的なシナリオに応じてストラテジーを変更することで、コードの再利用性を高めることが可能。
  • 練習問題を通じて、実際の業務における適用例を考える機会を持つことが重要。