Java:实例真的比静态好吗?

And*_*ină -2 java oop static class object

所以,我有几类,比如MainWindow,MenuPanel,GamePanel,GameEngine,Player等...

我的问题是,虽然我已经阅读了很多关于静态vs实例的内容,但应该更推荐使用它,根据我的一行看起来像这样: MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);

要么 MainWindow.getGamePanel().getLabels()[0].getIcon();

你认为这是一个很好的做法试图让自己不要使用静态,每一个对象有不同的属性,事情不是一概而论,而不是可能宣布labelsplayersnames静态且具有更易于重用和读取的代码?

我的想法是使用这些长代码,因为例如在(更像逻辑)类中创建一个GamePanel(可视类)对象肯定会很尴尬.所以我只是创建了每个类的一个对象(不是主类,只是JFrame类)并为它们中的每一个创建.PlayerMainWindow static getters

Kev*_*ede 7

MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);
Run Code Online (Sandbox Code Playgroud)

这是对德米特定律的经典违反,有时表达为"问,不看".调用这些getter的类对程序的整体结构有太多的了解,这使得它变得脆弱.如果这些类之间的关系发生变化,那么依赖于这些链式getter的所有代码都将会中断.

"问,不看"背后的想法是,调用这些getter来获取玩家名称的类应该要求玩家名称作为构造函数参数.如果这导致具有大量参数的构造函数,则该类可能违反单一责任原则.