Builder Pattern vs Abstract Factory Pattern

どちらもインスタンス生成に関わるパターン。
違い、というか、フレームワーク設計時にこの2つをどう使い分ければいいのか、よくわからなかったので、自分なりにまとめてみた。

Builder Patternは、インスタンスの生成プロセスを抽象化する(Abstract Builder)。プロセスはカプセル化され、それをシンプルなAPIにまとめ、利用可能にする。というわけで、様々な生成プロセスを持つクラス(Concrete Builders)をシンプルなAPIで作れるようになる。
『Createrは汎化されない、Createされる対象が汎化される』と理解してみる。

対して、Abstract Factory Patternは、あるクラス群と、その生成クラスを抽象化する(Abstract Models, Abstract Factory)。個々のクラスの生成プロセスはAPI群として、Abstrtact Factoryが提供する。つまり、インスタンス生成にかかわるAPIはあらかじめ固定される
『Createrは汎化される(FactoryA, FactoryB, FactoryC,...)、Createされる対象は汎化されない』と理解してみる。