所以我有几个类,如MainWindow
,MenuPanel
,GamePanel
,GameEngine
,Player
等等......
我的问题是,虽然我已经阅读了很多关于静态vs实例的内容,但是应该更推荐使用它,根据我的一行看起来像这样:
MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);
或MainWindow.getGamePanel().getLabels()[0].getIcon();
你认为这是一个很好的做法,试图不使用静态,其中每个对象都有不同的属性而且事情没有概括,而不是声明labels
或players
和{{ 1}}静态并且更容易重用和读取代码?
我的想法是使用这些长代码,因为在names
中创建GamePanel
(可视类)对象肯定会很尴尬(更像是例如,逻辑上的类。所以我只是在Player
(不是主类,只是JFrame类)中创建了每个类的一个对象,并为每个类创建了MainWindow
。
答案 0 :(得分:7)
MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);
这是对Law of Demeter的经典违规行为,有时表示为“请求,不要看。”#34;调用这些getter的类对程序的整体结构有太多的了解,这使得它变得脆弱。如果这些类之间的关系发生变化,那么依赖于这些链式getter的所有代码都将会中断。
背后的想法"问,不要看"是调用这些getter获取播放器名称的类应该要求播放器名称作为构造函数参数。如果这导致具有大量参数的构造函数,则该类可能违反了Single Responsibility Principle。