简而言之:设计和实现工厂+插件机制的最佳方法是什么,以便插件可以替换主应用程序中的对象。

我们有一个代码库,我们可以从中构建应用程序。代码库适用于70-95%的应用程序,这意味着在每个新应用程序中,我们需要更改5-30%的默认行为(添加新功能,更改默认逻辑,添加GUI等)。

该实现是基于插件的:代码库内置于EXE和DLL中,当主EXE运行时,我们加载了一个DLL,它添加了所需的功能。

目前,每个插件都公开以下功能:

PluginInterface* PluginInit()
{
    return new MyCustomizedPluginInterface();
}

其中PluginInterface定义为:

class PluginInterface {
public:
    virtual SomeClass1* customizedSomeClass1() = 0;
    virtual SomeClass2* customizedSomeClass2() = 0;
};

SomeClass1 / SomeClass2有一些默认行为,但可以被插件覆盖和更改。

当前的实现使得添加新的自定义类变得困难。我们想从插件中替换主应用程序中的每个类,因此使用对象工厂是有意义的。

我知道的一个SDK使用以下技术:

PluginInterface* PluginInit(GodObject* godObject)
{
    FactoryForSomeClasses* factoryForSomeClasses = 
        godObject->factoryForSomeClasses();
    factoryForSomeClasses->setSomeClass1Creator( MyCustomizedSomeClass1::create); // create is a static creator function.
    factoryForSomeClasses->setSomeClass2Creator( MyCustomizedSomeClass2::create);
}

我想知道这种方法是否有其他选择。

您如何推荐设计和实现我刚刚描述的插件系统/工厂?

有帮助吗?

解决方案

有一篇文章回到Dobb医生那里,讨论了这个确切的问题。以下是相关文章的链接

另外,您可能希望坚持使用直接的C接口来插入项目。这样,您几乎可以轻松地将几乎任何语言编写的代码链接到您的框架中。虽然C ++很好,但是能够利用比C ++中存在的更多的东西,比如Java和Python领域中存在的令人难以置信的框架,从长远来看可能是有益的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top