有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何根据标识符实例化某个子类,还是有更好的方法?

背景:
我目前正在制作一个游戏,游戏中会有几类家具,比如椅子、桌子或绘画供玩家互动。为此,我创建了一个抽象类GameObject,它处理所有这些对象的共同点(例如绘图、保存位置变量等)。家具件将有一些不同的参数,例如宽度和高度(整数),以及用户选择与家具件交互时发生的情况(例如:椅子->;如果播放器靠近,坐下,桌子->;无,绘画->;独立于距离进行检查)。家具可以从菜单中创建,该菜单返回所选工件的某种标识符(当前为整数)

问题:
我应该如何使用不同的家具
一种方法是为每件家具创建一个子类。但这有两个缺点;首先,很难管理这么多的类,其次,在创建家具时,必须基于标识符创建GameObject的正确子类(请参见后续问题)

对我来说,最合理的选择似乎是创建一个通用类,该类接受构造函数中的宽度和高度参数,以及用户单击对象时可以运行的可运行/其他接口。不同的值可能存储在数据库中,并基于标识符进行检索,但不同的操作仍然会出现问题,因为无法在外部存储可运行文件,这会导致与解决方案1相同的问题;许多不同的类,其中一个必须为当前对象选择

后续问题: 根据家具和动作的类型,可能需要更高级的子类和其他方法。如果是这样的话,不管前面问题的解决方案如何,根据标识符选择要实现哪一个的问题仍然存在。我不想用一个巨大的switch语句来实例化不同的类,所以有什么方法可以解决这个问题吗

这款游戏是为Android平台设计的,但未来可能会有IOS端口,所以java特定的答案并不可取,但可以接受


共 (1) 个答案

  1. # 1 楼答案

    如果不考虑所有的if和but,就很难想出一个完美的设计解决方案

    然而,游戏的一个关键部分是物品(家具、绘画等)与每个物品上可以执行的动作之间的关系。这就是如何对这种关系进行建模(使用合成):

    动作:代表游戏动作的界面。包含一个名为performAction的方法

    SittingAction:一个实现Action的具体类。代表一种坐姿的游戏动作。实现performAction方法来定义执行坐姿动作的代码

    考试反应:一个实现动作的具体类。表示用于检查项目的游戏操作。实现performAction方法以定义执行检查操作的代码

    类似地,您可以为游戏中可以执行的每种类型的动作定义一个动作

    GameItem:表示游戏中某个项目的类。包含所有项目共有的属性,如项目名称、宽度、宽度、深度等,以及这些属性的获取者和设置者。GameItem有一个Action类型的实例变量和一个构造函数,该构造函数使用Action参数来初始化操作。GameItem还定义了一个名为onInteraction的方法,当用户与GameItem交互时,可以调用该方法。此方法将通过调用Action实例变量上的performAction方法来委托执行与GameItem关联的操作的任务。因此,任何实例化GameItem的类都必须将适当的操作传递给GameItem构造函数,该构造函数表示与GameItem关联的操作。当用户与项目交互时,只需调用onGeneration方法

    GameController:一个监听用户事件并对与之交互的GameItem调用OnGeneration方法的类

    就这样。干净简单。不需要任何if-else语句来检查对什么项目执行什么操作。Simpy使用适当的操作实例实例化所有GameItem实例,并让侦听用户输入的GameController在与之交互的GameItem上调用OnGeneration方法