在 Java 中很常见的“静态工厂方法”在 C++ 也很常见么?Java为什么样选择interface来作为"接口"这个功能的关键字
在看《Effective Java》第①条有感。 如果 C++ 使用静态工厂方法,返回值为基类指针的话,应该也很容易实现吧。
但依个人经验,似乎在 C++ 中的静态工厂方法很少见。
如果是真的少见,请分析为什么。
如果实际上也很多只是我孤陋寡闻,请举几个比较经典的例子(从 Java 移植到 C++ 的库不算,因为有为了“保持统①代码风格”的嫌疑)。
为什么会少见?
C++ 有虚析构函数、dynamic_cast 等等,实现起来没什么难度。
================
好吧,这个东西又不是什么模板元编程之类的黑科技,值得大谈特谈吗?都是很直观的编程手段,你到了那个场景,自然而然会想到用这个方法来解决,用不着看了某某经典书籍才知道这种不算技巧的技巧。
例子:
内存池。这个到处都有。例如,最快的 XML 库 RapidXML,有①个 rapidxml::memory_pool,实现的就是这种对象工厂概念。我相信知乎上大热的 RapidJSON 库也有类似的实现(RapidJSON 参考了 RapidXML)。
我刚好在写的代理服务器也直接用了①个简化的版本。
Python ②.x 的 PyIntObject,缓存了小于 ①⓪②④ 的所有小整数。当然,这个是 C,但这是用 C 实现的面向对象代码,用 C++ 会更加简洁。
wxWidgets,①个 GUI 框架,大量存在这种对象工厂模式,用于隐藏平台差异。
总之,这种手法是随处可见的,没什么大不了的。
接口可以想成①种规范。
比如我们常听说的PCI(规范)接口,这个东西并不等于那个主机板上的插槽。而是,这个插槽是该接口的①个实例,比如有①个A型号的PCI接口实现(类),现在有①个A型号的PCI插槽(类的实例),满足PCI接口的显卡,就可以插进来。
就说④。题主不想把interface叫interface,那
叫protocol
叫type class
叫shape
实在不行叫base class with only pure virtual functions
都行,随便挑
因为就是你说的
我理解的接口,是像UI和API里面的Interface,它附属于某个物体,在这个物体和其他物体之间充当媒介(像API的Interface,它附属于程序A,负责在A和B之间充当媒介,交换数据)
……
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
