gpt4 book ai didi

c++ - 在 C++ 中构建带有对象存储库的工厂?

转载 作者:行者123 更新时间:2023-11-30 03:11:56 25 4
gpt4 key购买 nike

我想创建一个工厂来创建实现抽象接口(interface)的对象,该接口(interface)将返回对内部保存的对象的引用,并且不会复制对象。这个想法与 log4cxx/log4j Logger 类设计中的想法几乎相同。我还想尽可能多地向客户端隐藏细节,即查看公开的 .h 文件不会显示私有(private)成员等实现细节。示例:

EncryptorRef = Encryptor::getEncryptor("AES");

我想知道是否接受了此类设计的已发布指南/示例代码,因为我不想重新发明轮子,而且这个任务很常见。我想到了使用静态工厂方法、内部单例存储库以及对具体对象的智能指针/引用作为返回类型。问题:

  • 是否有此类设计的示例简单代码? (log4cxx的代码太复杂,不能作为骨架)
  • 如果客户端只看到纯抽象 Encryptor 类定义的 encryptor.h,我该如何完全隐藏存储库?
  • 您是否建议使用智能引用或指针作为返回类型?是否有智能引用的标准实现?
  • 任何其他建议将不胜感激

非常感谢!

最佳答案

只有当客户端不再需要对对象的引用时需要进行任何清理(例如,释放一些锁或其他资源,或减少一些引用计数)时,使用智能指针作为返回值才有用。如果不需要这样的东西,我建议返回一个简单的引用。这样,客户知道他不必管理对象的生命周期或类似的事情。智能引用的标准实现是 Boost.SmartPtr。至于隐藏实现,把你要暴露的接口(interface)放到纯抽象基类中,让客户端通过工厂获取实例即可。他所需要的只是带有抽象基类的 header 、带有工厂声明的 header 和要链接到的二进制文件。

关于c++ - 在 C++ 中构建带有对象存储库的工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com