2014-12-18 21 views
1

我有一個應用程序,是一個數學遊戲的孩子。由於我在大學的時候,我一直平時只有我所有過去的項目是神的對象,但這個applciation我拆我的代碼爲多個類別:多個類應該如何用於應用程序的不同屏幕?

  • MathsGame.java:它初始化的組件和構造主類並控制UI。
  • DiffScreen.java:包含在難度選擇屏幕上使用的方法。
  • GameScreen.java:包含在遊戲屏幕上使用的方法。
  • EndGameScreen.java:包含在遊戲結束屏幕上使用的方法。
  • MigJPanel.java:延長JPanel,並設置佈局MigLayout,並添加了磨砂邊框。

每個屏幕,所述3類XScreen控制僅僅是MigJPanel實例和屏幕被切換到使用CardPanel容器JPanel

我不知道我怎麼可以把我的代碼,每個類,使他們得到適當的抽象,但我不完全知道如何處理這一點。

  1. 如果我的3級屏幕的類從我MigJPanel延伸,這些則可以被實例化?

    所以不是有我DiffScreenGameScreen,並EndGameScreen類僅包含與每個屏幕然後將其從MathsGame調用的方法,每一個屏幕將其自己的類中控制自己。

  2. 如果是對前一個問題,應該每個屏幕的UI組件是屏幕的類中做?

    此刻,在我MathsGame構造函數創建爲三個屏幕的所有組件。這使得屏幕與「控制」類(我在此刻使用這個詞非常輕微)之間的聯繫更加分離。因此,每個屏幕只是MigJPanel的一個實例,其組件在MathsGame中構建。例如EndGameScreen類別與End Game屏幕的唯一關係是,當MathsGame導致顯示結束遊戲屏幕時,在那裏完成的任何操作都會使EndGameScreen中的方法從MathsGame中調用。

我希望我解釋得很清楚。如果沒有,留下評論,我會澄清。任何幫助將不勝感激!

+2

1-是的,2-是的。關注自我遏制並保持責任領域。每個UI屏幕都有責任管理它的內容,而不是其他人,實際上,您應該防止允許對這些組件進行不受限制的修改,並且只能通過間接(setter和getters)的託管方法提供訪問,這允許修改屬性,而不是簡單地通過getter提供組件,這可以防止人們刪除不想刪除的組件的問題...... – MadProgrammer

+1

如果需要,您還可以使用接口來維護常用功能,因此如果「 MathsGame'只想處理一定數量的信息/功能,您可以使用其他屏幕使用的界面,這將簡化過程,因爲'MathsGame'只需要瞭解實現界面的類而不是每件事情可能會發生......作爲一個建議... – MadProgrammer

+0

@MadProgrammer這非常有幫助,謝謝!你想把這個答案作爲答案,我可以接受它嗎?另外,我應該在哪裏放置用於在屏幕之間切換的代碼?由於該方法是非靜態的,因此我在每個屏幕類的'ActionListener's上都會出現一個錯誤,因爲該方法是非靜態的,但我無法使其成爲靜態的,因爲它是靜態的爲我在'MathsGame'類中創建的'CardLayout'執行'show()'。我假設我應該有3種方法在類之間切換,但我應該在哪裏放置它們以及我的'CardLayout'? –

回答

2
  1. 是的。

注重自我遏制和維護的責任範圍。每個UI屏幕都有責任管理它的內容,而不是其他人,事實上,您應該防止允許對這些組件進行不受限制的修改,並且只能通過間接管理的方法(setter和getter)提供訪問權限,這允許修改例如,要更改屬性,而不是簡單地通過getter提供組件,這可以防止人們刪除不想刪除的組件的問題。

如果需要,您也可以使用接口來維護常用功能,因此如果MathsGame真的只想處理一定數量的信息/功能,則可以使用所有其他屏幕使用的接口,這將簡化過程中,由於MathsGame只需要知道實現該接口,而不是每一件事情別人說可能什麼類...作爲一個建議..

而且,我應該在哪裏把代碼切換屏幕之間?

從我的角度來看,這是MathsGame遊戲的責任,以確定何時以及應該在哪個屏幕上顯示。我通常會做的是提供某種通知過程,當前屏幕可以要求MathsGame切換屏幕,也許通過聽衆或其他接受的界面。這意味着每個屏幕都需要參考MathsGame

不是傳遞它(MathsGame)直接,我會創造MathsGame將實現一個接口(比如NavigationController),其中明確了通話/合同,每個子屏可以使用(nextScreen/previousScreen)爲例。

看看Model-View-Controller瞭解更多點子

相關問題