オブジェクト指向: デザインパターン

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

FactoryMethod(工場メソッド)

クラス利用者がインスタンスを作成するのではなく、
クラス設計者がインスタンスを作成し、利用者に渡すパターン。
クラス内に他クラスのインスタンスを作成して返すメソッドを用意する。
クラス数が多く、どれとどれを使ってよいか分かりにくい場合に使用するクラスを強制できる。
デザインパターン FactoryMethod:インスタンス作成をサブクラスに任せる」参照

AbstractFactory(抽象的な工場)

DBへの接続等、環境によってコードが全く異なる場合に、
引数によって使用できるオブジェクトを切り分けるパターン。
取得した環境変数を引数としてクラスへ渡し、
クラス内でDBMSの種類に応じたオブジェクトを返す事で、
利用者はDBMSの種類に応じた処理をかき分けなくて済む。
AbstractはJavaにおける抽象メソッド宣言。C#ではVirtual。
デザインパターン AbstractFactory:関連する部品を組み合わせる」参照

Builder(構築者)

コンストラクタを複数用意し利用者が複雑な初期値設定を省略(カプセル化)させるパターン。
メンバーが多く、定型的なプロパティがある場合に有用。

Prototype(原型)

多くの初期値を必要とするインスタンスにおいて、
オブジェクトを生成する度に初期値を渡すのではなく生成済みインスタンスのクローンを返すパターン。
利用者は多くの初期値を渡されて生成されたインスタンスのクローンをもらえるので楽。
デザインパターン Prototype:コピーしてインスタンスを作る」参照

Singleton(一人っ子)

システム内に存在するオブジェクトが1つであることを保証する
デザインパターン Singleton:たった1つのインスタンス」参照

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

Adapter(接続装置)

あるオブジェクトを受け取るメソッドがある場合に、
必要なメンバーを持っていないオブジェクトにメンバーを継承させる、
接続用オブジェクトを介してオブジェクトをやり取るするパターン
デザインパターン Adapter(Wrapper):包んで再利用」参照

Composite(混合物)

構造の異なるオブジェクトに対して木構造として制御可能にする
ファイルとディレクトリの様な異なるオブジェクトが再帰的に処理できる様になる。
デザインパターン Proxy:必要になってから作る」参照

Facade(見かけ)

システム内に存在する複数のインタフェースに1つの統一インタフェースを与える
利用者は統一インターフェースのみを認識すれば良いので利用が簡単になる。
デザインパターン Facade:シンプルな窓口」参照

Proxy(代理人)

主オブジェクトへのアクセスへの処理の前に、共通のインタフェースを持つオブジェクトが代理処理を行う
処理を分散する事で負荷を軽減できる
デザインパターン Composite:容器と中身の同一視」参照

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

Mediator(調停者)

相互に関連するオブジェクト同士を直接やり取りさせず、
調停者オブジェクトを介させるパターン。
オブジェクトに変更を加えた場合でも他オブジェクトを全て変更する必要がなく、
調停者オブジェクトに変更を加えるだけで済む。

Iterator(繰り返し)

配列系データからデータを取得する場合の実装パターン。
hasNext()とnext()メソッドだけを実装し、
データ構造を見せない(index番号等を引数に渡さない)。
配列におけるindexの開始値や終了値の認識の違いによるミスを防げる。
デザインパターン Iterator:1つずつ数える」参照

Templatemethod(ひな型メソッド)

スーパークラスで処理の流れを定義し、その処理の詳細はサブクラスで定義する。
デザインパターン TemplateMethod:具体的な処理をサブクラスに任せる」参照