无需重新编译即可添加代码模块的设计模式

Design pattern for adding Code modules without recompiling

您好,我需要一些关于以下场景的合适设计模式的想法

我有一个游戏引擎,游戏有不同的关卡,每个关卡都执行这些模块,但我希望我的游戏能够拾取 Game play 文件夹中掉落的新关卡。例如,每个新级别都需要一个新的游戏模块。我不想更改游戏引擎的代码,我只想将新关卡添加到某种配置中,游戏应该为该关卡执行新的游戏模块

在我的脑海中,我在考虑命令模式或复合模式

这通常称为 加载项 插件 。在 .NET 中,这就是 Managed Extensibility Framework 最初旨在解决的问题,尽管我不确定该技术的确切状态是什么......

一般来说,您可能不需要为此配置文件。相反,您的应用程序可以指定一个目录,它将在其中查找加载项。在 .NET 中,这些将是已编译的程序集,而在 Java 中,我想它们将是 .jar 文件。

应用程序发现加载项后,它可以使用反射来扫描它们以查找应用程序特定接口或基础的实现 类(我推荐接口)。

要支持实例化和组合,您可能需要考虑使用将组合所有加载项的 DI 容器。

由于多个加载项可以提供同一接口的实现,复合设计模式就派上用场了。