デザインパターンとは、システム設計におけるクラスやインターフェースの関係に名前をつけたものです。 GoFの23のパターンが有名です。デザインパターンというのは、どんなパターンなのか、パターンの目的は何かということを覚えることが非常に重要なのですが、これを実際に適用しようとした場合に、いつ適用していいかが見えてこないとお話になりません。

そこで、自分の勉強も兼ねつつ、パターンの実践時における使用場所や、パターンを適用するきっかけを見つけられるようにメモしておきます。

12番目は処理手順やアルゴリズムをスムーズに交換できるようにするStrategyパターンのメモです。

Strategyパターン

 Strategyパターンは、実行時に処理のアルゴリズムを決定したいときに使うパターンです。

処理のアルゴリズムとは、例えばソートの方法であったり、数値の計算の仕方であったりします。

Strategyのクラス図

1つ目のアルゴリズムを使うと計算は速いがメモリをたくさん使う。2つ目のアルゴリズムを使うと計算は遅いがメモリは少なくすむ。1つ目のアルゴリズムと2つ目のアルゴリズムを使うかは、ユーザに選択させたい場合など、動的にアルゴリズムを切り替える必要があります。こういった場合に使えるパターンとなります。

Strategyパターンは、委譲を用いるという手法が良くとられます。これがコンポジションの主な実装になります。

パターンの適用タイミング

Strategyパターンの使い時はわかりやすいと思います。処理の方法やアルゴリズムを動的(実行時)に切り替えたい場合に使います。

Strategyパターンと同じ実装方法で同じクラス図になるパターンに、Stateパターンというのがあります。このパターンは、インスタンスの状態を動的に変更したい場合に使うものです。Strategyパターンとは概念が違います。Strategyパターンは、動的に処理方法やアルゴリズムを変化させます。

実装サンプルと参考文献

Strategyパターンの実装方法をもっと詳しく知りたい場合は、下記のサイトにアクセスするのをお勧めします。もしくは、参考書籍を載せておきますので、そちらをお買い求めください。(^^;

  • 日立ソフト(Strategyパターン) 日立ソフト

  • Skeleton of GOF’s Design Pattern(JavaとC++のサンプルがあります) Strategyの骸骨

  • デザインパターンのお勧め書籍


  • 独習シリーズのデザインパターン編。デザインパターンを一人でも学べます。

  • Sun Microsystemのお墨付き。GoF以外のパターンも学べます。

  • UMLを使って、オブジェクト指向のいいとこ取りができます。

  • デザインパターンだけではなく、ソフトウェア設計の原則やプラクティスまで学びたい人におすすめ