【オブジェクト指向】全23種類のGoFデザインパターンに関する説明と参考書籍

Gang Of Fourデザインパターンを学ぶメリット

Gang of Fourのデザインパターンとは、「よく見かける機能要件(解決したい問題)」と「各機能要件に対応する設計方針」を23種類に整理したものです。例えば、「単一リソースにアクセスする場合はSingletonデザインパターンが良い」というように、機能要件に適した設計(デザインパターン)を提案しています。

デザインパターンの初出は1995年であり、その有用性がある程度理解されてきたので、オブジェクト指向による設計での基礎知識となりつつあります。デザインパターンが最善の設計方法ではない事もありますが、それを理由にデザインパターンを学習しないのは早計です。

個人的には、デザインパターンを学ぶと、以下のメリットが得られると考えています(デメリットも併記)

デザインパターンを学んでおくメリット
  • 設計に関する引き出しの増加
  • チームで設計検討する際のボキャブラリー(設計に対する共通認識)の増加
  • オレオレ設計(不適切な設計)を採用してしまう機会の減少
  • 機能追加時、デザインパターンを適用したコードは修正範囲が小規模になりやすい
デザインパターンのデメリット
  • デザインパターンの適用が必ず正しいと盲信してしまう事
  • デザインパターンが不要なケースに対して、デザインパターンを適用してしまう事
    • 例:後述するCommandパターンは、ラムダ式で同じ目的を達成可能

          

本記事では、JavaやRubyを用いて、各デザインパターンのクラス図と実装例を紹介した記事へのリンクを示します。リンク先がない項目は、記事を作成次第、下表を更新していきます。

また、本記事の最後でデザインパターンに関する参考書籍を紹介します。

                   

オブジェクトの生成に関するデザインパターン

名称 説明
Abstract Factory 依存しあうクラス群を生成する処理を集約化し、複数クラスの再利用性が向上します
Builder インスタンスの生成過程を隠蔽し、複雑な構造を持つインスタンスの生成が容易になります
Factory Method インスタンスの生成をサブクラスに任せる事によって、クラスの再利用性が向上します
Prototype 雛形となるインスタンスを用意し、一部のフィールドだけ異なるインスタンスの生成が容易になります
Singleton あるクラスのインスタンスが一つしか生成できない状態にし、リソース等の競合を防止します

                      

プログラムの構造に関するデザインパターン

名称 説明
Adapter 既存クラスを修正せずに、そのクラスのインターフェースを別のインターフェースに変換します
Bridge 機能(サービス)と実装を階層分けし、それぞれの階層を独立して拡張できる状態にします
Composite 木構造を伴う再帰的なデータ構造を表現します
Decorator 既存クラスを修正せずに、別クラスで既存クラスをラッピングする事によって機能追加します
Facade 複数の処理をまとめるクラスを作成し、サブシステムの独立性を高めます
Flvweight 一度生成したインスタンスを共有し、再利用する事によって、処理スピードを改善します
Proxy 本人が実施しなくてよい処理を代理人に実行させ、処理スピードを改善します

                   

 オブジェクトの振る舞いに関するデザインパターン

名称 説明
Chain Of Responsibility 「依頼側」と「受信側」の結合を緩める事によって、クラスの再利用性が向上します
Command 複数の異なる操作に対応するコマンドクラスを用意し、新しい操作の追加を容易にさせます
Interpreter 構文解析のための文法規則を定め、特定の文法を動的に解析します
Iterator 複数の要素を管理するクラスの全ての要素に対して、順次アクセスする方法を提供します
Mediator 仲介者を通して各クラスを操作する事によって、クラス同士の結合度を下げます
Memento データ構造に対する操作を記録し、以前の状態に復帰もしくは操作再現を行います
Observer インスタンスの変化を他のインスタンスから監視可能にします
State インスタンスの状態を変化させる事によって、処理内容を変化させます
Strategy データ構造に適用するアルゴリズムを隠蔽し、アルゴリズムの切替を容易化します
Template Method アルゴリズムに含まれる処理の一部を抽象メソッドとし、実装を切替可能にします
Visitor 「データ構造を保持するクラス」と「データ構造を処理するクラス」を分離します

                        

デザインパターンに関する書籍 

書籍名 コメント
増補改訂版Java言語で学ぶデザインパターン入門 Javaにおける定番書籍。やや古い(2004年出版)
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 本記事で取り扱っていないマルチスレッドのデザインパターン。
マルチスレッド自体の難易度は高いが、本書は分かりやすい。
Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本 やりがちな失敗例とデザインパターン適用例を比較しています。
言語はJava
【知らないと損をする】レベルアップJava~デザインパターン編~ 安価。約500円で購入でき、内容はシッカリとまとまっています
Rubyによるデザインパターン Javaと比較すると、シンプルに実装できるRubyの魅力に気づけます

                   

おすすめ

4件のフィードバック