今天看了一篇来自ICSE07的文章,讲API可用性的,来自CMU的研究人员。题目是:The Factory Pattern in API Design: A Usability Evaluation。他们的研究结果说明,传统的抽象工厂模式,损坏了API的可用性,恰恰class cluster和构造函数的模式能够弥补这一点。或者说,后一个模式更有利于提高API可用性。
按照文章中介绍的思路,用C++实现了constructor+class cluster模式。发现这种方法有一个缺点,因为是通过构造函数来产生具体对象的,所以返回给客户的类型还是基类型,因此客户对具体虚函数调用时,调用的是基类的函数。基类虚函数必须提供一个转发,就是说基类的每个虚函数都要给出一个实现。
后来发现用单件模式结合class cluster模式,可以很好的弥补这个缺点。参见代码。这主要参考了下面的文章:http://www.gamedev.net/reference/articles/article2260.asp。