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