当前位置: 首页 > 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.hskmm.com/?act=detail&tid=39118

相关文章:

  • 第二次作业--田佳吉
  • 电脑频繁卡顿?4个CMD命令揪出后台隐藏进程
  • 2025_软件工程师课程辅导
  • Graphiti:为智能体构建实时知识图谱,引领更聪明的 AI 时代
  • 《《《es相关
  • 人资新手必看,企业绩效的意义
  • 题解:P14309 【MX-S8-T2】配对
  • HuggingFace 库使用小技巧
  • 启动分布式mapreduce的过程以及prompt
  • 【ArcMap】复制选中的线并将其上移一段距离
  • 题解:AT_apc001_h Generalized Insertion Sort
  • 记一次thinkphp3.2项目迁移失败的原因。 is currently unable to handle this request. HTTP ERROR 500
  • 20232310 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • [SWPUCTF 2024 秋季新生赛]http标头 WP
  • 20251025 之所思 - 人生如梦
  • Jerrum–Sinclair 全有或全无定理
  • 一种解决所有 OI 问题的算法:Dream 算法
  • CobaltStrike流量分析
  • 【论文阅读】ASPS: Augmented Segment Anything Model for Polyp Segmentation - 指南
  • RuoYi-Cloud 认证实现
  • 初步学习计算机相关知识有感 - fang
  • 2025年自动上料机厂家权威推荐榜:螺旋上料机/真空上料机/粉末上料机,高效输送系统精准选型指南
  • 用代码将txt分别转换成列表和字典
  • 每日反思(2025_10_25)
  • AtCoder Beginner Contest 429 ABCDEF 题目解析
  • 2025年提升机厂家推荐排行榜,自动提升机,垂直提升机,物料提升机,工业提升设备公司精选
  • 刷题日记—数组—布尔数组的应用
  • 详细介绍:k8s中的kubelet
  • 树状数组 区间加 区间和 小记
  • 实验二 现代C++编程初体验