c++ - 工厂对象与工厂函数

标签 c++ design-patterns factory

我有一个包含多个派生类的 ABC。为了创建这些派生类,我使用工厂模式:

.h文件:

class derivedFactory
{
public:
    base* createInstance();
};

.cpp 文件:

base* derivedFactory::createInstance()
{
    return new derived();
}

与仅具有免费功能相比,这有什么优势吗:

.h文件:

base* derivedFactoryFunction();

.cpp 文件:

base* derivedFactoryFunction()
{
    return new derived();
}

另外:我使用抽象工厂模式进行依赖注入(inject)。我可能会使用基于 ABC 的继承层次结构:

class objectCreator
{
public:
    base* create() = 0;
};

在函数指针上使用它有什么优势吗:

boost::function<base* ()> factory_ptr;

使用 boost::bind/lambda 这似乎使我的代码更具可组合性,如果我希望我可以在其中包装一个真正的工厂对象。我可以看到性能可能会略有下降,但这很值得担心,因为它仅在启动期间调用。

最佳答案

这取决于您的工厂需要多灵活。如果工厂需要外部信息(如来自配置文件、程序选项等)来确定如何构造对象,那么对象就有意义了。如果您需要的只是工厂的参数,那么函数可能没问题。

我认为拥有指针的唯一优势是用于测试,您可以在测试中使用不同的工厂函数。

关于c++ - 工厂对象与工厂函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536464/

相关文章:

c++ - Qt - 从 C++ 线程发出信号

java - 匹配器仅匹配第一个结果

design-patterns - 在呈现的 UI 元素上调用不同业务规则的设计模式

javascript - 无法通过 Angular $resource 发布数据?

oop - 外挂 : Using factory pattern in combination with strategy pattern

javascript - 按位运算符比 + 和 - 运算符更快

C++ 模板这可能吗?

c++ - 使用工厂 friend 类来分配新类,好的做法?

c++ - 如何使用 fstream 读取文件的特定行?

c# - 使用存储过程的命令模式