我有一个适合孩子的数学游戏应用程序。由于我在大学,我通常只有一个上帝对象用于我过去的所有项目,但是对于这个应用程序,我将我的代码分成多个类:
MathsGame.java
:初始化组件和构造并控制UI的主类。DiffScreen.java
:包含在难度选择屏幕上使用的方法。GameScreen.java
:包含在游戏屏幕上使用的方法。EndGameScreen.java
:包含在最终游戏屏幕上使用的方法。MigJPanel.java
:展开JPanel
并将布局设置为MigLayout
并添加遮罩边框。 3个XScreen类控制的每个屏幕只是MigJPanel
的一个实例,屏幕将切换为使用CardPanel
容器JPanel
。
我想知道如何将我的代码划分到每个类,以便它们被正确抽象,但我不完全确定如何处理它。
我的3个屏幕类是否应该从我的MigJPanel
扩展,以便这些可以实例化?
因此,不是让我的DiffScreen
,GameScreen
和EndGameScreen
类只包含与每个屏幕相关的方法,然后从MathsGame
调用,每个屏幕都会控制自己在自己的班级内。
如果对上一个问题是肯定的,那么每个屏幕的UI组件是否应该在该屏幕的类中进行?
目前,三个屏幕中每个屏幕的所有组件都是在我的MathsGame
构造函数中创建的。这使得屏幕和“控制”的类之间的连接(我此刻非常轻易地使用这个词)它甚至更远。因此,每个屏幕只是MigJPanel
的一个实例,其组件在MathsGame
中构建。 EndGameScreen
类对于结束游戏屏幕的唯一关系是,当MathsGame
导致显示结束游戏屏幕时,在那里完成的任何事情都会在EndGameScreen
中生成一个方法从MathsGame
开始。
我希望我能很好地解释自己。如果没有,请发表评论,我会澄清。任何帮助将不胜感激!
答案 0 :(得分:2)
注重自我遏制并保持责任范围。每个UI屏幕都有责任管理它的内容,其他人,实际上,你应该防止允许对这些组件进行无限制的修改,并且只能通过托管方法间接提供访问(setter和getter),这允许修改您想要更改的属性,而不是简单地通过getter提供组件,这可以防止人们移除您不想删除的组件的问题,例如。
如果需要,您还可以使用接口来维护常用功能,因此如果MathsGame
真的只想处理一定数量的信息/功能,您可以使用所有其他屏幕使用的接口,将简化过程,因为MathsGame
只需要知道实现接口的类,而不是可能正在进行的其他任何事情......作为建议..
另外,我应该在哪里放置用于在屏幕之间切换的代码?
从我的角度来看,MathsGame
游戏的责任是确定何时以及应该显示哪个屏幕。我通常会做的是提供某种通知过程,当前屏幕可以通过监听器或其他同意的界面要求MathsGame
切换屏幕。这意味着每个屏幕都需要引用MathsGame
。
我没有直接传递它(MathsGame
),而是创建了MathsGame
将实现的接口(比如说NavigationController
),它定义了每个子屏幕可以调用的调用/合约例如,使用(nextScreen
/ previousScreen
)。
请查看Model-View-Controller了解更多提示