在 Java 中很常见的“静态工厂方法”在 C++ 也很常见么?Java为什么样选择interface来作为"接口"这个功能的关键字

时间:2018-03-03 13:06:02   浏览:次   点击:次   作者:   来源:   立即下载

在看《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之间充当媒介,交换数据)

……

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息