Strategyパターンの事例と本連載のまとめ
デザインパターンの活用ポイント
これまで紹介したパターンも含めて、デザインパターンには次の共通する設計指針があります。
・変動要素の分離
・クラス継承より、オブジェクトコンポジションの活用
・インターフェースの活用
これらの指針はデザインパターンだけに限らず、オブジェクト指向設計の定石とも言えるものです。再利用を考えた場合、変動要素を持つクラス間の結合度はできるだけ弱くする必要があります。よって、安易なクラス継承は好まれず、コンポジションによるオブジェクトの合成や、クラスとクラスの間に間接層としてインターフェースを追加することで、クラス間の結合度を弱くします。
これらの指針を十分に理解することがデザインパターンを習得する近道になります。
変更に強い設計や既存実装のリファクタリングを行う場合、何が変動要素なのかよく知ることが重要です。そして変動要素の抱える問題に対する解決法が必要になります。今回はGoFのデザインパターンの中から問題に対する解決法(図3)をまとめましたので、参考にしてデザインパターンを活用してください。
最後に
今回でこの連載は最後になりますが、この5回の連載で23種類のGoFのデザインパターンの中から次の8つを紹介しました。
・第1回 Template Method(ふるまい)
・第2回 Observer(ふるまい)
・第3回 Adapter(構造)
・第3回 Factory Method(生成)
・第4回 Composite(構造)
・第4回 Command(ふるまい)
・第4回 Chain of Responsibility(ふるまい)
・第5回 Strategy(ふるまい)
この連載で紹介できなかったパターンも含めて、どのパターンも目的や構造は非常に小さく単純なものばかりです。しかし、中にはパターンの構造が同じものもいくつか存在しているため混乱することもあるでしょう。そんな場合は、パターンの目的や動機、適用可能性をしっかり読み直してパターンの着眼点を理解してください。そうすれば、なぜ同じ構造になるのか混乱せずに理解できるはずです。
またデザインパターンを学習する方法の1つとして、連載の中で紹介した事例のようにオープンソースソフトウエア(以下、OSS)のソースコードを読んでみることをお勧めします。OSSの中で何を実現するためにどのデザインパターンが使われているかを理解することで、デザインパターンがもたらすメリットや、活用する場面を整理できるからです。もし、実践でデザインパターンをうまく活用できないような経験がある場合は、一度チャレンジしてみてください。
要求を正しく理解して、ソフトウエアの基本構造をしっかり設計することで、仕様変更による影響を最小限にとどめることができます。デザインパターンは、ソフトウエアの基本構造を支える知識の1つとして非常に有効です。またデザインパターンは、既存の実装をリファクタリングする際にも有効です。これを機会に開発の現場でデザインパターンを活用できているか振り返ってみるのもよいかもしれません。
最後になりますが、この連載が開発の現場に携わるエンジニアの方々に少しでもお役に立てれば幸いです。それでは、またどこかでお会いしましょう!
【参考文献】
Erich Gamma, Rechard Helm, Ralph Jonson, John Vlissides『オブジェクト指向における再利用のためのデザインパターン』ソフトバンククリエイティブ(発行年:1999)
結城 浩『Java言語で学ぶデザインパターン入門』ソフトバンクパブリッシング(発行年:2001)
「総務省 - 定額給付金について」(http://www.soumu.go.jp/teigakukyufu/) (アクセス:2009/04)