问题描述
嗨,我需要一些想法,这将是适合以下情况的设计模式
我有一个游戏引擎,并且游戏具有不同的级别,可以为每个级别执行这些模块,但是我希望我的游戏能够拾取放置在“游戏”文件夹中的新级别。例如,每个新级别都需要一个新的游戏模块。我不想更改游戏引擎的代码,而只是想将新关卡添加到某种配置中,游戏应该是针对该关卡执行新的游戏模块。
在我的脑海中,我正在思考命令模式或复合模式
解决方法
通常称为插件或插件。在.NET中,这是Managed Extensibility Framework最初旨在解决的问题,尽管我不确定该技术的确切状态是什么。
通常,您可能不需要此配置文件。相反,您的应用程序可以指定一个目录,在该目录中它将查找加载项。在.NET中,这些将是已编译的程序集,而在Java中,我认为它们将是.jar文件。
一旦应用程序发现了加载项,便可以使用Reflection对其进行扫描,以查找特定于应用程序的接口或基类(我建议使用接口)的实现。
要支持实例化和组合,您可能要考虑使用由DI容器组成的所有加载项。
由于多个加载项可以提供同一接口的实现,因此Composite设计模式确实派上用场。