GoF本 Discussion of Creational Patterns

GoFデザインパターン勉強メモ

生成のパターンの分類

2つに大別

継承

  • Factory Method

集約

  • Abstract Factory
  • Builder
  • Prototype

比較検討 — シンプルなオブジェクトを生成する場合

Factory Method

  • シンプル

    • メソッド足すだけ
    • クラスの追加を伴わない
  • クラスツリーが膨大になる

    • GraphicToolCircle
    • GraphicToolLine
  • とりあえずFactoryMethod、という人もいるが、本当に必要か?

    • 生成するオブジェクトが決して変わらない
    • 既存のメソッドのポリモーフィズムでオブジェクトを作り分けできる

      • Initialize()メソッドとか

AbstractFactory

  • やはりクラスツリーが膨大になる

    • GraphicsToolGraphicsFactoryを集約する場合

      • GraphicsFactoryCircle
      • GraphicsFactoryLine
  • 比較的複雑

    • AbstractFactoryクラスツリーの追加が必要

      • すでにファクトリのクラスツリーがあるならば、FactoryMethodよりは良い
        (他プロジェクトのコードなど)

Prototype

  • クラスツリー膨大にならない
  • Clone()を実装すればいいだけ

    • 生成以外にも使える(複製)
  • 比較的複雑

    • Prototypeのカタログの追加等が必要
    • 生成後、product.Initialize(args)を呼ぶ必要があることも

選択

  • どれが一番よいかの判断材料はさまざま
  • システムが育つにつれて、どの部分に柔軟性が必要かがわかってくることもある
  • 引き出しが多いことが大事