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

时间:2016-07-28 21:50:45

标签: java class oop object static

所以我有几个类,如MainWindowMenuPanelGamePanelGameEnginePlayer等等......

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

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

你认为这是一个很好的做法,试图不使用静态,其中每个对象都有不同的属性而且事情没有概括,而不是声明labelsplayers和{{ 1}}静态并且更容易重用和读取代码?

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

1 个答案:

答案 0 :(得分:7)

MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);

这是对Law of Demeter的经典违规行为,有时表示为“请求,不要看。”#34;调用这些getter的类对程序的整体结构有太多的了解,这使得它变得脆弱。如果这些类之间的关系发生变化,那么依赖于这些链式getter的所有代码都将会中断。

背后的想法"问,不要看"是调用这些getter获取播放器名称的类应该要求播放器名称作为构造函数参数。如果这导致具有大量参数的构造函数,则该类可能违反了Single Responsibility Principle