GuessGame兩個版本的區別
GuessGame 兩個版本的區別分析
一、控制臺輸出
控制臺版本的ConsoleGame是最基礎、最傳統的程序交互方式,它通過標準的輸入輸出流與用戶進行通信。
- 實現方式:
- 輸入:使用java.util.Scanner類來讀取用戶在控制臺(命令行窗口)中鍵入的文本。
- 輸出:使用 System.out.print()和 System.out.println()方法將文本直接打印到控制臺上。
- 代碼特點:
// ConsoleGame.java @Override public void print(String text) { System.out.print(text); // 直接輸出到控制臺 } @Override public void println(String text) { System.out.println(text); // 輸出并換行 } @Override public int nextInt() { return scanner.nextInt(); // 從控制臺讀取整數 } - 用戶體驗:
-
界面為純文本,沒有圖形元素。
-
交互方式是“命令-響應”式,用戶需要按照提示輸入。
-

二、圖形界面
圖形界面版本GUIGame使用 Swing 組件庫,通過彈出的對話框與用戶進行交互,提供了更友好、舒適的用戶體驗。
- 實現方式:
- 輸入:使用 javax.swing.JOptionPane.showInputDialog() 方法彈出一個輸入對話框,用戶可以在文本框中輸入內容。
- 輸出:使用 javax.swing.JOptionPane.showMessageDialog() 方法彈出一個消息對話框,向用戶展示信息。
- 代碼特點:
// GUIGame.java @Override public void print(String text) { // 在對話框模式中,簡單的print可以被忽略或整合到nextInt的提示中 } @Override public void println(String text) { // 彈出消息對話框顯示信息 JOptionPane.showMessageDialog(null, text); } @Override public int nextInt() { // 彈出輸入對話框獲取用戶輸入 String input = JOptionPane.showInputDialog(null, "請輸入數字(0~9):"); try { return Integer.parseInt(input); } catch (NumberFormatException e) { return -1; // 輸入無效時返回一個特定值 } } - 用戶體驗:
- 界面是圖形化的窗口,包含按鈕、文本框等元素。
- 交互方式是點擊和填寫,對普通用戶更直觀、更友好。
- 對話框是模態的,會強制用戶處理當前任務,直到完成(猜對)。
![image]()
![image]()
2.1 抽象類的好處
在這個例子中,抽象類 GuessGame 是設計的核心,它帶來了以下關鍵好處:
-
定義通用框架(模板方法模式):
GuessGame 的 go() 方法定義了猜數字游戲的固定流程:生成隨機數 -> 循環獲取用戶輸入 -> 判斷結果 -> 結束游戲。這個**算
法骨架**是固定不變的,而與用戶交互的具體步驟(如何輸入、如何輸出)則被設計成抽象方法,由子類去實現。
-
實現代碼復用:
游戲的核心邏輯(隨機數生成、循環比較、勝負判斷)只寫在 GuessGame 中一次。如果沒有抽象類,那么 ConsoleGame和
GUIGame 就需要各自實現一遍完全相同的游戲邏輯,造成代碼冗余,當需要實現的東西太多,還會有可能造成漏寫。
-
支持多態和擴展性:
我們可以這樣寫代碼:
GuessGame game = new ConsoleGame(); // 使用控制臺版本 // GuessGame game = new GUIGame(); // 使用圖形界面版本 game.go();這就是多態。程序的主體邏輯可以完全不知道具體是哪個版本,只管調用 go() 方法即可,隱藏了背后的邏輯。未來如果想實現其他版本,主程序幾乎不需要修改。
三、兩者對比
| 對比維度 | ConsoleGame (控制臺版) | GUIGame (圖形界面版) |
|---|---|---|
| 交互媒介 | 文本流 | 圖形窗口 |
| 依賴庫 | java.util.Scanner | javax.swing.JOptionPane |
| 輸入方式 | scanner.nextInt() | JOptionPane.showInputDialog() |
| 輸出方式 | System.out.println() | JOptionPane.showMessageDialog() |
| 用戶體驗 | 簡潔、快速,適合技術用戶 | 友好、直觀,適合普通用戶 |
| 實現復雜度 | 極低 | 低(Swing封裝了復雜性) |
四、總結
GuessGame 的兩個版本(ConsoleGame 和 GUIGame),是面向對象設計思想的絕佳體現。它們雖然在外觀和交互方式上截然不同,但其背后的游戲靈魂(核心邏輯)是完全一致的。
這種設計的重點在于抽象方法。GuessGame抽象類成功地將“不變”的游戲邏輯與“多變”的界面實現分離開來,實現了多態。



浙公網安備 33010602011771號