当前位置: 首页 > news >正文

GuessGame两个版本的区别

GuessGame 两个版本的区别分析


目录
  • GuessGame 两个版本的区别分析
    • 一、控制台输出
      • 二、图形界面
      • 2.1 抽象类的好处
      • 三、两者对比
      • 四、总结

一、控制台输出

控制台版本的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(); // 从控制台读取整数
    }
    
  • 用户体验
    • 界面为纯文本,没有图形元素。

    • 交互方式是“命令-响应”式,用户需要按照提示输入。

image


二、图形界面

图形界面版本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 是设计的核心,它带来了以下关键好处:

  1. 定义通用框架(模板方法模式)

    GuessGame 的 go() 方法定义了猜数字游戏的固定流程:生成随机数 -> 循环获取用户输入 -> 判断结果 -> 结束游戏。这个**算

法骨架**是固定不变的,而与用户交互的具体步骤(如何输入、如何输出)则被设计成抽象方法,由子类去实现。

  1. 实现代码复用

    游戏的核心逻辑(随机数生成、循环比较、胜负判断)只写在 GuessGame 中一次。如果没有抽象类,那么 ConsoleGame和

GUIGame 就需要各自实现一遍完全相同的游戏逻辑,造成代码冗余,当需要实现的东西太多,还会有可能造成漏写。

  1. 支持多态和扩展性

    我们可以这样写代码:

    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抽象类成功地将“不变”的游戏逻辑与“多变”的界面实现分离开来,实现了多态。

http://www.zskr.cn/news/30555.html

相关文章:

  • 2025_软件工程师课程辅导
  • 《《《es相关
  • 人资新手必看,企业绩效的意义
  • 题解:P14309 【MX-S8-T2】配对
  • 【ArcMap】复制选中的线并将其上移一段距离
  • HuggingFace 库使用小技巧
  • 【打造自己的 DeepSeek】第 2 期:怎么安装自己的 DeepSeek?
  • 一种解决所有 OI 问题的算法:Dream 算法
  • CobaltStrike流量分析
  • 2025年自动上料机厂家权威推荐榜:螺旋上料机/真空上料机/粉末上料机,高效输送系统精准选型指南
  • 建立VLAN间通信
  • 详细介绍:React Native 中的 useState、Context
  • 明天的任务
  • 深度神经网络 —— 使用深度自动编码器进行手写数字的去噪音
  • 完整教程:Webpack5 第四节
  • 完整教程:ACWing08:高精度专题
  • 使用本地git命令行拉取github.com软件仓库public项目
  • 10.25 CSP-S模拟39/2025多校冲刺CSP模拟赛8 改题记录
  • 嵌入子流形
  • 玩转单片机之智能车小露——数字与字符串的转换与打印
  • linux磁盘管理-RAID介绍 - 详解
  • Link-Cut Tree
  • 线段上随机取n个点的最大距离期望
  • 第5天(中等题 滑动窗口、逆向思维)
  • Meet in the middle 学习笔记
  • 虚拟机下 安装 ubuntu 18.04
  • 路径规划算法学习Day2:广度优先搜索算法(BFS)
  • 完整教程:ros_control 中 hardware_interface 教程
  • 飞牛NAS的SSL证书过期,又开启了强制HTTPS,进不去界面修改SSL怎么办? - 详解
  • 多表查询-练习