c++ - 如何在工厂中为延迟实例化指定具体类/如何延迟构造函数调用

标签 c++ oop constructor

我有几个服务器程序,它们有一堆通用代码,但在一些子类实现上有所不同。我使用像这样的抽象工厂模式:

int main(int argc, char **argv) {
    Factory *factory = new Program1Factory();
    ServerThread theServer(factory);       // inject the dependencies
    theServer.start();
}

Factory 是一个纯抽象类,由我需要获取方法的各种位组成,这些方法因程序而异。它看起来大致是这样的:

class Factory {
    public: virtual foo *getFooThing() = 0;
    public: virtual bar *getBarThing() = 0;
};

一个程序的具体声明和实现可能是这样的:

class Program1Factory : public Factory {
    public: virtual foo *getFooThing() { return new Program1Foo(); }
    public: virtual bar *getBarThing() { return new Program1Bar(); }
};

在我遇到一堆方法之前,这一切都很好,这些方法本身是我无法控制的库的子类。

在该库中,每个类的构造函数都要求在构造函数中提供要处理的数据!但是我的程序还没有数据;它刚刚启动并宣布其工厂。只有在所有方法都设置好并且线程启动后,我的服务器程序才会接收作为构造函数输入的事务。

也就是说,在上面的例子中,我不能简单的说:

return new Program1Bar()

因为派生Program1Bar的类只有一个构造函数看起来像

Program1Bar(string *inputString, string *outputString)

我的工厂实例化时没有这些值。

我需要以某种方式创建一个指向我想要的具体类的指针,将该指针存储在我的工厂中,并且——我无法弄清楚的困难部分——在数据最终到达时为这些类实例化(调用构造函数)。

我该怎么做?

最佳答案

由于这些限制,您的 Program1Bar 类不能是第 3 方库的子类。很难谈论抽象,但一个建议是让你定义一个像 Task1Bar 这样的类,它是你的第 3 方库的子类。

然后在 ProgramBar1::someMethod 中的某处,您可以调用 new Task1Bar。如果您需要第 3 方库跨方法持久化,您始终可以在 Program1Bar 类中定义一个成员 Task1Bar* task1

只是一个建议,正如我所说,很难在抽象中定义。

关于c++ - 如何在工厂中为延迟实例化指定具体类/如何延迟构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422677/

相关文章:

c++ - C 和 C++ 中的套接字解​​释

python - 在 python 3 中从父类扩展 __init__ 的正确方法

c++ - 如何访问对象的私有(private)成员?

javascript - 在Javascript构造函数中使用 'this'来访问属性

c++ - 在 C++ 中显示访问冲突的错误

algorithm - find_if 的两个条件

c++ - (c++) 如何有效地制作升序(dyn.solution)

java - 建模事件类型对象

c++ - 无法在另一个类中实例化模板化类

JavaScript:避免对象构造函数中的 'this' 被事件覆盖?