GoF本 Discussion of Creational Patterns
生成のパターンの分類
2つに大別
継承
- Factory Method
集約
- Abstract Factory
- Builder
- Prototype
比較検討 -- シンプルなオブジェクトを生成する場合
Factory Method
- シンプル
- メソッド足すだけ
- クラスの追加を伴わない
- クラスツリーが膨大になる
GraphicToolCircle
GraphicToolLine
- ...
- とりあえずFactoryMethod、という人もいるが、本当に必要か?
- 生成するオブジェクトが決して変わらない
- 既存のメソッドのポリモーフィズムでオブジェクトを作り分けできる
Initialize()
メソッドとか
AbstractFactory
- やはりクラスツリーが膨大になる
GraphicsTool
がGraphicsFactory
を集約する場合GraphicsFactoryCircle
GraphicsFactoryLine
- ...
- 比較的複雑
- AbstractFactoryクラスツリーの追加が必要
- すでにファクトリのクラスツリーがあるならば、FactoryMethodよりは良い
(他プロジェクトのコードなど)
- すでにファクトリのクラスツリーがあるならば、FactoryMethodよりは良い
- AbstractFactoryクラスツリーの追加が必要
Prototype
- クラスツリー膨大にならない
Clone()
を実装すればいいだけ- 生成以外にも使える(複製)
- 比較的複雑
- Prototypeのカタログの追加等が必要
- 生成後、
product.Initialize(args)
を呼ぶ必要があることも
選択
- どれが一番よいかの判断材料はさまざま
- システムが育つにつれて、どの部分に柔軟性が必要かがわかってくることもある
- 引き出しが多いことが大事