導入
デザインパターンは、ソフトウェア開発において再利用可能な解決策を提供します。特にC#のようなオブジェクト指向プログラミング言語では、デザインパターンを適用することで、コードの可読性や保守性が大幅に向上します。今回は、実務で遭遇しやすい具体的なシチュエーションを通じて、デザインパターンの理解を深めます。
教科書レベルの解説(デザインパターン)
重要な概念の整理
今回注目するデザインパターンは「ストラテジーパターン」です。このパターンは、アルゴリズムをクラスとしてカプセル化し、それを動的に切り替えることを可能にします。例えば、異なる種類のデータを処理する際に、処理方法を柔軟に変更したい場合に非常に有効です。
コード例(C#)
using System;
public interface IStrategy
{
void Execute(string data);
}
public class ConcreteStrategyA : IStrategy
{
public void Execute(string data)
{
Console.WriteLine("Strategy A: " + data);
}
}
public class ConcreteStrategyB : IStrategy
{
public void Execute(string data)
{
Console.WriteLine("Strategy B: " + data);
}
}
public class Context
{
private IStrategy _strategy;
public void SetStrategy(IStrategy strategy)
{
_strategy = strategy;
}
public void ExecuteStrategy(string data)
{
_strategy.Execute(data);
}
}
public class Program
{
public static void Main(string[] args)
{
Context context = new Context();
context.SetStrategy(new ConcreteStrategyA());
context.ExecuteStrategy("Hello, World!");
context.SetStrategy(new ConcreteStrategyB());
context.ExecuteStrategy("Hello, Design Patterns!");
}
}
コードの行ごとの解説
- インターフェースIStrategyを定義し、Executeメソッドを宣言します。
- ConcreteStrategyAとConcreteStrategyBで、IStrategyを実装し、それぞれ異なる処理を行います。
- Contextクラスでは、IStrategyを保持し、SetStrategyメソッドで戦略を設定します。
- ExecuteStrategyメソッドを通じて、設定された戦略のExecuteメソッドを呼び出します。
- Mainメソッドでは、Contextインスタンスを作成し、異なる戦略を設定して実行します。
練習問題編
以下の練習問題に挑戦し、ストラテジーパターンの理解を深めてください。
-
問題 1: ストラテジーパターンを用いて、異なるログ出力方法(コンソール、ファイル、データベース)を実装してください。
模範解答: 各ログ出力方法を実装したクラスを作成し、Contextクラスを用いて動的に切り替えます。
-
問題 2: ストラテジーパターンを利用して、異なる割引計算(固定、パーセンテージ)を行うクラスを作成してください。
模範解答: 割引計算の異なるアルゴリズムを実装したクラスを作り、Contextクラスで切り替えます。
-
問題 3: ストラテジーパターンを使って、異なるデータベース接続方法(SQL、NoSQL)を実装してください。
模範解答: 各データベース接続方法を実装したクラスを作成し、Contextクラスで動的に切り替えます。
まとめ
- ストラテジーパターンは、異なるアルゴリズムを動的に切り替えるのに役立ちます。
- 実務での適用例として、ログ出力や割引計算、データベース接続などがあります。
- 具体的なシチュエーションに応じて、柔軟に設計を変更することが可能です。