我正在尝试重构一些代码。目前该代码遵循以下模式:
function f() {
Transaction trans;
// Do Operation
trans.commit();
}
这里的交易是具体的类。我想将它移动到Interface并使这段代码看起来像:
function f() {
ITransaction* trans = GetTransaction();
// Do Operation
trans->commit();
}
// Factory
ITransaction* GetTransaction()
{
return new Transaction();
}
问题:我们在工厂方法中开始使用new,现在可以进行堆分配。我想避免这种堆分配,仍然设法使用接口。 有没有办法实现这个目标?
谢谢, 凯拉斯
答案 0 :(得分:1)
你可以做的就是在堆栈上分配Factory类。
void function() {
Factory factory{};
auto transaction = factory.getTransaction(arguments...);
}
工厂看起来像:
class Factory {
A aTransaction;
B bTransaction;
C correctTransaction;
transactionBase* getTransaction(arguments...) {
//return one member based on arguments
}
}
但是,如果您的参数允许使用模板,那么执行
之类的操作会变得更容易一些void function () {
Factory<Arguments...> transaction;
}