GoFのデザインパターンとは
オブジェクト指向のソフトウエア再利用について代表的なものを23のパターンにまとめたものです。効率的な生産性、再利用や修正などのメンテナンス性を考慮したオブジェクト指向のプログラミングをする時の模範となります。
GoFデザインパターンの種類
種類 | パターン名 | 直訳 | 覚える 優先順位 | 概要 |
---|---|---|---|---|
オブジェクトの生成に関するパターン | AbstractFactory | 抽象的な工場 | ▲ | ・インスタンスの生成を専門に行うクラスを用意することで、整合性を必要とされる一連のオブジェクト群を間違いなく生成するためのパターンです。 ・関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的としています。 ・必要なオブジェクトを作るクラス(「ファクトリクラス」と呼ぶ)をいくつか用意しておくというものです。 |
Builder | 構築者 | ▲ | ・同じ作成過程で異なる表現形式の結果を得るためのパターンです。 ・オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にします。 |
|
FactoryMethod | 工場メソッド | ◎ | ・オブジェクトの生成方法に一工夫加えることで、より柔軟にオブジェクトを生成することを目的とする。 ・FactoryMethod パターンでは、インスタンスの生成をサブクラスに行わせることで、より柔軟に生成するインスタンスを選択することが可能となる。 ・Factoryとは、英語で「工場」を意味する。インスタンスを生成する工場をTemplate Methodパターンで構成したものがFactory Methodパターンとなる。 |
|
Prototype | 原型 | ▲ | ・あらかじめ用意しておいた「原型」からインスタンスを生成するようにするためのパターンです。 ・生成されるオブジェクトの種別がプロトタイプ(典型)的なインスタンスであるときに使用され、このプロトタイプを複製して新しいオブジェクトを生成します。 ・Abstract Factory パターンでなされるように、クライアント・アプリケーションにおいてオブジェクトの生成者をサブクラスすることを回避します。 ・標準的な方法(例えば'new')で新しいオブジェクトを作ることによる固有のコストが所与のアプリケーションにとって高すぎる時にそれを回避するために用いられます。 |
|
Singleton | 一人っ子 | ◎ | ・クラスのインスタンスを1つに保ちたいという時などオブジェクトの生成数を制限したいときに利用します。 ・そのクラスのインスタンスが1つしか生成されないことを保証することが出来ます。 ・ ロケールやLook&Feelなど、絶対にアプリケーション全体で統一しなければならない仕組みの実装に使用されます。 ・オブジェクトを生成するnewは非常に負荷のかかる処理なので、使いまわしが効くオブジェクトを毎回newするのはパフォーマンス上問題となります。 毎回newする必要のない場合は初めに生成したオブジェクトを再利用すぺきです。 <特徴> ・同じ型のインスタンスが private なクラス変数として定義されています。 ・コンストラクタの可視性が private となっています。 ・同じ型のインスタンスを返す getInstance() がクラス関数として定義されています。 |
|
プログラムの構造に関するパターン | Adapter | 接続装置 | ○ | Adapter パターンを用いると、既存のクラスに対して修正を加えることなく、インタフェースを変更することができます。 手法として「継承を利用した手法」と「委譲を利用した手法」が存在します。 |
Bridge | 橋 | ▲ | ||
Composite | 合成物 | ◎ | ・部分―全体階層を表現するために、オブジェクトを木構造に組み立てる。Composite パターンにより、クライアントは、個々のオブジェクトとオブジェクトを合成したものを一様に扱うことができるようになる。 ・Composite とは、英語で「複合物」を意味する。Composite パターンは、「容器と中身を同一視する」ことで、再帰的な構造の取り扱いを容易にします。 |
|
Decorator | 装飾者 | ▲ | ・既存のオブジェクトに新しい機能や振る舞いを動的に追加することを可能にします。 ・飾り枠と中身を同一視することで、より柔軟な機能拡張方法を提供します。 |
|
Facade | 見かけ | ○ | 関連するクラス群を使用するための手続きを、窓口となる一つのクラスに集約することにより、プログラムの冗長性(必要最低限のものに加えて、余分や重複がある状態)を無くすことを目的とします。 | |
Flyweight | 軽量級 | ▲ | ||
Proxy | 代理人 | ▲ | ||
オブジェクトの振る舞いに関するパターン | ChainOfResponsibility | 責任の連鎖 | ▲ | |
Command | 命令 | ○ | 動作とそれに伴うパラメータをカプセル化したものです。 | |
Interpreter | 通訳 | ▲ | ||
Iterator | 繰り返し | ○ | コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。 | |
Mediator | 調停者 | ▲ | ||
Memento | 形見 | ▲ | ||
Observer | 観察者 | ▲ | ||
State | 状態 | ○ | オブジェクトの状態(state)を表現するために用いられます。ランタイムでそのタイプを部分的に変化させるオブジェクトを扱うクリーンな手段となります。 | |
Strategy | 戦略 | ○ | プログラミング時に、アルゴリズムを実行時に選択することができます。 | |
TemplateMethod | ひな型メソッド | ◎ | ある処理のおおまかなアルゴリズムをあらかじめ決めておいて、そのアルゴリズムの具体的な設計をサブクラスに任せることです。そのため、システムのフレームワークを構築するための手段としてよく活用されます。 | |
Visitor | 訪問者 | ▲ |