简而言之:设计和实现工厂+插件机制的最佳方式是什么,以便插件可以替换主应用程序中的对象。
我们有一个代码库,用于构建我们的应用程序。代码库适用于 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);
}
我想知道这种方法是否有任何替代方法。
你会如何推荐像我刚才描述的那样设计和实现一个插件系统/工厂?