Virtual Class Factory Method vs. Virtual Method Factory Method

Virtual Class による Factory Method の実装と通常の GoF Factory Method では、どのような違いがあるんだろうか。
一つの違いは、もし、デフォルトの Product がないのであれば、Virtual Class での実装は無理、ということ。なぜなら new で interface とか抽象クラスをインスタンス化はできないため。
もう一つの違いは、Virtual Class の場合、実装が、Creator 内に書かなければいけない、ということ。もし、Product がシンプルなのであればいいけど、複雑なのであれば、Virtual Class(インナークラス)としてでなく、別のクラスとして定義したほうがいいかも。
僕の感想としては、Virtual Class を使って Factory Method は書けるけど、少なくともシンプルな例を考えてみたときには、あまり Virtual Class を使って Factory Method を実装する利点はないように感じる。でも、Family Polymorphism の効果も合わせて考えると、Virtual Class を使って Factory Method を実装するのは効果的な場合があるかもしれない。
結論としては、実戦経験がないので、どちらが優れているか、あるいは、どのような場面でどちらが優れているのか、という判断は僕には今のところ無理。

参考:

  • (virtual class or Family Polymorphism 関連)

K. Ostermann. Dynamically Composable Collaborations with Delegation Layers. the 16th European Conference on Object-Oriented Programming.(2002)
http://www.st.informatik.tu-darmstadt.de/public/Publications.jsp

  • (Family Polymorphism 関連)

Andreas Wittmann. Towards Caesar: Family Polymorphism for Java. Diploma Thesis, Technische Universit¨at Darmstadt, Germany.(2003)
http://www.st.informatik.tu-darmstadt.de/public/Publications.jsp

  • (virtual class で Factory Method)

Ellen Agerbo, Aino Cornils. How to preserve the benefits of Design Patterns. Proc. of OOPSLA'98. (1998)
http://citeseer.nj.nec.com/271761.html