導入
デザインパターンは、ソフトウェア設計における反復的な課題を解決するためのテンプレートです。特にJavaでは、オブジェクト指向の特性を活かして、デザインパターンを実装することが多く見受けられます。今回は、実務においてよく遭遇するシチュエーションを取り上げ、具体的なデザインパターンを通じてその応用を考察します。
教科書レベルの解説(デザインパターン)
重要な概念の整理
デザインパターンには多くの種類がありますが、特に「ストラテジーパターン」は、アルゴリズムの切り替えを容易にするために利用されます。このパターンは、異なるアルゴリズムを持つ複数のクラスを定義し、必要に応じてそれらを切り替えられるようにします。これにより、コードの再利用性や拡張性が向上します。
コード例(Java)
interface SortingStrategy {
void sort(int[] array);
}
class QuickSort implements SortingStrategy {
public void sort(int[] array) {
// クイックソートの実装
}
}
class BubbleSort implements SortingStrategy {
public void sort(int[] array) {
// バブルソートの実装
}
}
class Sorter {
private SortingStrategy strategy;
public void setStrategy(SortingStrategy strategy) {
this.strategy = strategy;
}
public void sortArray(int[] array) {
strategy.sort(array);
}
}
コードの行ごとの解説
- interface SortingStrategy: ソートアルゴリズムのインターフェースを定義します。
- class QuickSort: クイックソートアルゴリズムの具体的な実装を提供します。
- class BubbleSort: バブルソートアルゴリズムの具体的な実装を提供します。
- class Sorter: ソート戦略を持ち、指定された戦略に基づいて配列をソートします。
- setStrategy: ソート戦略を動的に変更できるメソッドです。
- sortArray: 現在の戦略を用いて配列をソートします。
練習問題編
以下に、ストラテジーパターンに関連した練習問題を用意しました。各問題に対する模範解答も記載しています。
-
問題1: ストラテジーパターンを使って、マージソートの実装を追加してください。
模範解答: マージソートを実装したクラスを作成し、SortingStrategyインターフェースを実装します。 -
問題2: Sorterクラスに、ソートされた配列を表示するメソッドを追加してください。
模範解答: sortArrayメソッドの後に配列を表示するメソッドを追加します。 -
問題3: ソートアルゴリズムの選択をユーザーに任せるインターフェースを作成してください。
模範解答: コマンドライン引数やGUIを用いて、ユーザーにアルゴリズムを選ばせるロジックを実装します。 -
問題4: どのソートアルゴリズムが最適かを評価するメソッドをSorterクラスに追加してください。
模範解答: 各アルゴリズムの実行時間を計測し、結果を比較するメソッドを実装します。
まとめ
- ストラテジーパターンは、アルゴリズムの切り替えを容易にし、コードの柔軟性を高めます。
- 実務においては、異なる要件に応じて適切な戦略を選択することが求められます。
- 練習問題を通じて、実際のシナリオに即した理解を深めることが重要です。