デザインパターンに関するあれやこれや
はじめに
背景
昔読んだJavaのデザインパターンを夏休みの宿題として復習しようと思った、かつ、システムアーキテクチャを考えていく上でデザインパターンの考え方はためになるのではと感じた。
目的
- デザインパターンの目的・役割・活用の理解
※実装方法を理解するわけではない
対象者
- 自分
参考書
デザインパターン
デザインパターンとは
デザインパターンとは、設計時に出会う問題と解決方法に対する設計のパターンを示したもの。つまりは、ソフトウェア開発に関するノウハウ集のこと。実際には、Javaなどのオブジェクト指向における再利用を目指したクラスなどの実装集のイメージかと。
下記内容でGoogle先生に聞くといろいろと教えてくれるので聞いてみるとよい。 - デザインパターン - GoF
デザインパターンの種類
以下はWikipedia)より抜粋
デザインパターンの解釈(個人的な解釈)
- 目的:なぜ必要なのか
- 役割:何をするのか
- 活用:どこで使えそうか
Iterator
- 目的:???
- 役割:???
- 活用:???
Adapter
- 目的:新しいモノと既存のモノをつなげるときに既存のモノに手を加えないようにしたい
- 役割:新しいモノと既存のモノの間を上手くつなげる
- 活用:システムの互換性機能(バージョンアップ対象機能)
Template Method
- 目的:共通化すべき部分は共通化したい、他は利用する側で考えてほしい
- 役割:不変となる機能を共通化し、他は外で考えられる
- 活用:プラットフォームの軸となる機能
Factory Method
- 目的:作り方は共通化したい、作られるモノは自由にしたい
- 役割:作るものは意識せず、作り方を提供する
- 活用:ライブラリ機能
Singleton
- 目的:前提条件を保証したい(決めた条件のみの状態としたい)
- 役割:必ず一個しか作らない
- 活用:システム設定値などの機能
Prototype
- 目的:似たような条件が多すぎ、ユーザの操作で条件が変わるのを制御したい
- 役割:プリンタのようにひな型となるモノをコピーする
- 活用:エディタ系の機能
Builder
- 目的:複雑なものを一度に作るのではなく、積み上げるように作り上げたい
- 役割:骨組みは明確にし、他の部分は変更や追加可能とする
- 活用:???
Abstract Factory
- 目的:作り方の構成は共通化したい、作られるモノは自由にしたい
- 役割:不変となる構成を共通化し、他は外で考えられる
- 活用:ライブラリ機能
- ※Factory Methodの部品組み合わせをテンプレート化するイメージ
Bridge
- 目的:???
- 役割:???
- 活用:???
- ※「機能の階層」「実装の階層」がイメージできない
Strategy
- 目的:(状況に応じて機能を切り替えたい)
- 役割:(機能の切り替えを用意する)
- 活用:ゲーム機能
Composite
- 目的:???
- 役割:(再帰的な構造を表現する)
- 活用:???
Decorator
- 目的:部品の組み合わせで多様な要求に対応したい
- 役割:(再帰的な構造を作れる)
- 活用:フレームワーク機能
Visitor
- 目的:???
- 役割:(データを渡り歩き処理をする)
- 活用:???
おわりに
- すべては読めていないので、続きはいつかやろうかと・・・(全部やってからブログにしろという話は置いといて・・・)
- 先人の知恵は大事にすべき。だいたい迷ったらここに立ち返ると、しれっと解決できるような気がする。
- 今の職場ではこれを理解してプログラミングをしている人はいない。(自分含めて)
- すべてを理解する必要はなく、こんなのもあったなぐらいですぐ調べられるようにしておくのがベスト。
- 今回はプログラミングに関する本をもとにしたが、アーキテクチャ設計など様々な設計に関するノウハウ集は読んで、考え方を身に着けると役立ちそう。