GRASPパターン[生成者パターン]

生成者パターン(Creator

概要

「特定のオブジェクトを生成するのは誰か」について決定する

  • 「特定のオブジェクトを生成する責任を持つのは誰か」について決定する
    • GRASPパターンは責任の割り当てに関するパターン
  • 関係のないクラスにインスタンス生成を任せると、クラス同士の関係が複雑になり、保守性が低下してしまう

メリット

クラス間の 結合度が下がる

  • 無駄な結合が減り、結果的に疎結合になる

適用方法

(以下のいずれかを満たす場合)クラスBにクラスAを割り当てる責任を持たせるように決定する

  • BがAを含む、またはBがAを集約する
    • 階層的に上位のものが下位のものを生成する
      • BBSがスレッドを生成し、スレッドが記事を生成し、という感じ
    • これが最も重要視されるファクター
  • BがAを記録する
  • BがAを密接に使用する
  • BがAの初期化データを持っている
    • JavaでいうとAのコンストラクタに入れる必要のある情報をBが保持している、など

考察

GoFのFactoryパターンとの関連(使い分け)

  • 「生成ロジック」というのは単純なものから複雑なものまである
    • 上記のような場合、パフォーマンス(レスポンスやメモリ使用量など)を検討し、パフォーマンスを重視する場合はFactoryパターンを検討する
      • 生成者の責務を持つインスタンスが多くの情報を持つので処理が重くなるとか
      • プロパティファイルの値に従って類似したインスタンスのうちのどれかを返す、というように複雑な場合とか