抽象ファクトリパターンって面倒だだからまじめに実装する気にはならず、常に直接ファクトリメソッドを実装し、中でいろいろやることにしている。実際、どのくらいクソマジメに抽象ファクトリパターンを利用しているシステムってあるのだろうか?たとえば、COMのIClassFactoryを考えてみる。CoCreateInstanceを使ってるんじゃなかろうか(結局、同じことだし)。Javaではどうだろうか。XMLReaderFactoryは抽象ファクトリではなく単なるスタティックメソッドとしてファクトリメソッドを提供している。内部ではプロパティからXMLReaderの実装クラス名を得て生成するから生成するオブジェクトについては十分に抽象化されていると言える。抽象ファクトリパターンではなぜファクトリが抽象化されているかと言えば、ファクトリメソッドを抽象メソッドとしたいからに他ならない。代替手段があればそんな実装を行う必要はない。IClassFactoryについて言えば、レジストリによってPROGID+CLSID+xServerエントリによってクラスがパラメタライズされているからCoCreateInstanceスタティックメソッド(というかWin32APIだから関数)で代替できる。Javaの場合、文字列からClass.forNameで実体化できるからXMLReaderFactoryはスタティックメソッドの提供で十分となる。その一方でjavax.crypto.SecretKeyFactoryみたいに抽象ファクトリを教科書どおりに実装しているものもあるわけだが。いうか、java.sql.DriverManagerなんか、まさにそういうパターンのような(直接クラス名を指定してforNameで作れとなっている)。抽象ファクトリクラスよりも、オブジェクトそれ自身にファクトリメソッドを用意したほうが良い場合もあるのではないだろうか(実装固有の処理をクラス内に閉じるため)。