GenericFactory 类
template <typename BASE, typename IDENTIFIER = QString, typename... ARGUMENTS> class GenericFactoryThe GenericFactory class implements a template-based generic factory. 详细...
头部 | #include <GenericFactory> |
继承自 | KDUpdater::FileDownloaderFactory, KDUpdater::UpdateOperationFactory, 和 QInstaller::ArchiveFactory |
公共类型
公共函数
虚拟 | ~GenericFactory() |
BASE * | create(const IDENTIFIER &id, ARGUMENTS... args) const |
受保护函数
详细描述
GenericFactory 是工厂模式的实现。它可用于生成具有常见超类 BASE
的不同类的实例。工厂的用户通过使用标识符 IDENTIFIER
在工厂中注册那些可生产的类。然后可以使用该标识符根据用户的需求生成尽可能多的已注册产品实例。
当衍生的 BASE 类的构造函数或注册的生成函数具有所有衍生的 BASE 类的共同签名时,一个工厂实例才能够生成衍生的不同类型的类实例。此签名由 ARGUMENTS 的声明顺序描述。在下文中引用为 SIGNATURE。
如果一个从 BASE 派生的类不包含与注册的构造函数或生成函数匹配的 SIGNATURE,那么无法使用 GenericFactory 子类的单个实例创建其实例。在这种情况下,需要多个 GenericFactory 子类和实例。
可以使用 registerProduct() 函数在 GenericFactory 子类的实例内部注册 BASE 的子类。以下条件之一必须满足:
- 存在具有 SIGNATURE 的全局或静态函数。
- DERIVED 类具有具有 SIGNATURE 的构造函数。
- DERIVED 类具有具有 SIGNATURE 的静态函数。
要获取 DERIVED 的新实例,需要一个调用 create() 函数。IDENTIFIER 的值决定了工厂中注册的产品子类,而 SIGNATURE 的值是实际传递给类构造函数或注册的生成函数的实际参数。
©2021 The Qt Company Ltd。本文档中包含的贡献文档均为各自所有者的版权。所提供的文档于 Free Software Foundation 发布的 GNU 自自由文档许可证版本 1.3 的条款下提供。Qt Company、Qt 及其分别的标志是芬兰和/或在其他国家的 The Qt Company Ltd 的商标。所有其他商标均为其各自所有者的财产。