2016-07-28 14 views
-2

は、だから私はMainWindowMenuPanelGamePanelGameEnginePlayerのようないくつかのクラスを持っているように...私はもっと使用することを推奨されるべきである、インスタンス対静的について多くを読んだもののJava:インスタンスは静的よりも本当に優れていますか?

私の質問は、 、私のラインの一つは、このようになります応じて: MainWindow.getGamePanel().getPlayer1().getName().toLowerCase().compareTo(...);

またはMainWindow.getGamePanel().getLabels()[0].getIcon();

あなたは、これはすべてのオブジェクトは、異なる特性を持っていないと物事は何のどこ静を使用しないよう努力して良い習慣だと思いますかlabelsまたはplayersnamesを静的に宣言するのではなく、コードを再利用して読みやすくするのではなく、一般化されていますか?

アイデアは、確かに例えばクラスPlayer(論理のようなより)にGamePanel(ビジュアルクラス)オブジェクトを作成するために、厄介なことになるので、私はこれらの長いコードを使用しています。だから、ちょうどMainWindow(メインクラスではなく、JFrameクラス)の各クラスの1つのオブジェクトのように作成し、それらのすべてに対してstatic gettersを作成しました。

+3

私はあなたが非常に奇妙な方法でコードを構造化しましたように聞こえる...あなたが記述しているものを伝える多くの問題を抱えています。あなたが静的な参照を使ってすべてをやっているように見えますが、あなたはちょうど静的参照ですべてをやっているようです。特定のインスタンスを返すトップレベルの静的メソッドがあります。もっと多くのコードを見なくてもわかりにくいですが、物事を再構成して、長いアクセスチェーンを必要としないと確信しています。 –

+2

'MainWindow.getGamePanel()。getPlayer1()。getName()。toLowerCase()。compareTo(...);'のような行は、インスタンスを使用して_just_ではなく、デザインが悪いために発生する可能性があります。 –

答えて

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

これは時々のように表現Law of Demeterの古典的な違反であり、「見ていない、お願いします。」これらのgetterを呼び出すクラスは、プログラムの全体的な構造をあまりにも多く知っているため、プログラムが脆弱になります。これらのクラスの間の関係が変更されると、これらの連鎖したゲッターに依存するすべてのコードが中断されます。

「見ていない、頼む」の背後にある考え方は、プレイヤー名を取得するために、これらのゲッターを呼び出して、クラスではなく、コンストラクタのパラメータとして、プレイヤー名を要求すべきであるということです。それが膨大な数のパラメータを持つコンストラクタにつながる場合、そのクラスはおそらくSingle Responsibility Principleに違反している可能性があります。

関連する問題