在不重新编译的情况下添加代码模块的设计模式

问题描述

嗨,我需要一些想法,这将是适合以下情况的设计模式

我有一个游戏引擎,并且游戏具有不同的级别,可以为每个级别执行这些模块,但是我希望我的游戏能够拾取放置在“游戏”文件夹中的新级别。例如,每个新级别都需要一个新的游戏模块。我不想更改游戏引擎的代码,而只是想将新关卡添加到某种配置中,游戏应该是针对该关卡执行新的游戏模块。

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

enter image description here

解决方法

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

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

一旦应用程序发现了加载项,便可以使用Reflection对其进行扫描,以查找特定于应用程序的接口或基类(我建议使用接口)的实现。

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

由于多个加载项可以提供同一接口的实现,因此Composite设计模式确实派上用场。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...