勉強日記

チラ裏

GoF本 Discussion of Creational Patterns

生成のパターンの分類

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)を呼ぶ必要があることも

選択

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