【问题标题】:Design pattern for adding Code modules without recompiling [closed]无需重新编译即可添加代码模块的设计模式 [关闭]
【发布时间】:2020-11-11 18:04:58
【问题描述】:
您好,我需要一些关于以下场景的合适设计模式的想法
我有一个游戏引擎,游戏有不同的关卡,每个关卡都执行这些模块,但我希望我的游戏能够拾取放在 Game play 文件夹中的新关卡。例如,每个新级别都需要一个新的游戏模块。我不想更改游戏引擎的代码,而是只想将新关卡添加到某种配置中,并且游戏应该为该关卡执行新的游戏模块
在我的脑海中,我在考虑命令模式或复合模式
【问题讨论】:
标签:
c#
oop
design-patterns
object-oriented-analysis
【解决方案1】:
这通常称为插件或插件。在 .NET 中,这就是 Managed Extensibility Framework 最初旨在解决的问题,尽管我不确定该技术的确切状态是什么......
一般来说,您可能不需要为此配置文件。相反,您的应用程序可以指定一个目录来查找加载项。在 .NET 中,这些将是已编译的程序集,而在 Java 中,我想它们将是 .jar 文件。
一旦应用程序发现了插件,它就可以使用反射来扫描它们以查找特定于应用程序的接口或基类的实现(我推荐接口)。
为支持实例化和组合,您可能需要考虑使用可组合所有插件的 DI 容器。
由于多个插件可以提供同一接口的实现,因此复合设计模式确实派上了用场。