デザインパターンの活用ポイント

デザインパターンの活用ポイント

 これまで紹介したパターンも含めて、デザインパターンには次の共通する設計指針があります。

・変動要素の分離
・クラス継承より、オブジェクトコンポジションの活用
・インターフェースの活用

 これらの指針はデザインパターンだけに限らず、オブジェクト指向設計の定石とも言えるものです。再利用を考えた場合、変動要素を持つクラス間の結合度はできるだけ弱くする必要があります。よって、安易なクラス継承は好まれず、コンポジションによるオブジェクトの合成や、クラスとクラスの間に間接層としてインターフェースを追加することで、クラス間の結合度を弱くします。

 これらの指針を十分に理解することがデザインパターンを習得する近道になります。

 変更に強い設計や既存実装のリファクタリングを行う場合、何が変動要素なのかよく知ることが重要です。そして変動要素の抱える問題に対する解決法が必要になります。今回は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)

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30