0

0

在Java中如何设计一个待办事项管理系统_Java面向对象编程应用

P粉602998670

P粉602998670

发布时间:2026-02-07 15:28:02

|

830人浏览过

|

来源于php中文网

原创

Task类应封装标题、描述、完成状态和创建时间,isCompleted设为private并提供complete()/uncomplete()方法;状态用TaskStatus枚举而非String;TaskManager统一管理集合操作并返回新集合;通过TaskRepository接口解耦存储,ID用UUID生成;CLI交互逻辑独立于业务模型。

在java中如何设计一个待办事项管理系统_java面向对象编程应用

Task 类封装核心状态和行为

待办事项最本质的属性是「标题、描述、完成状态、创建时间」,不是所有字段都该暴露给外部。把 isCompleted 设为 private,提供 complete()uncomplete() 方法控制状态流转,避免外部直接赋值导致逻辑断裂。时间字段用 LocalDateTime 而非 Date,避免时区和可变性问题。

常见错误:把 status 设为 String(如 "done"/"pending"),后续加新状态或校验时容易出错。改用枚举更安全:

public enum TaskStatus { PENDING, COMPLETED, CANCELLED }

这样能天然防止非法值,且便于未来扩展状态机逻辑。

TaskManager 管理集合与业务规则

别让 main 方法或 UI 层直接操作 ArrayList。把增删查改、按状态筛选、按日期排序等逻辑全收进 TaskManager,对外只暴露语义清晰的方法,比如 addTask(Task task)getPendingTasks()findTasksByKeyword(String keyword)

立即学习Java免费学习笔记(深入)”;

注意点:

  • getCompletedTasks() 应返回新集合(如 new ArrayList(filtered)),而非原始引用,防止外部误修改内部状态
  • 搜索方法默认区分大小写,若需模糊匹配,用 task.getTitle().toLowerCase().contains(keyword.toLowerCase()),但要注意空指针——先判 task.getTitle() != null
  • 排序建议用 Collections.sort(tasks, Comparator.comparing(Task::getCreatedAt)),比手动写冒泡或选择排序更可靠

用接口解耦存储方式,方便后期替换

现在用内存列表存数据很轻量,但一旦要持久化到文件或数据库,硬编码ArrayList 就成了障碍。提前定义 TaskRepository 接口:

闪电说
闪电说

AI语音输入法

下载
public interface TaskRepository {
    void save(Task task);
    List findAll();
    void deleteById(String id);
}

先写个 InMemoryTaskRepository 实现它,后续换成 FileTaskRepositoryJdbcTaskRepository 时,只要改一行 new 实例的代码,其他逻辑完全不用动。

容易被忽略的是 ID 生成策略:Task 构造时用 UUID.randomUUID().toString() 保证唯一性,别依赖数组下标或自增整数——后者在删除后会断层,也难跨进程共享。

命令行交互部分别侵入业务模型

用户输入解析(比如识别 "add Buy milk")、输出格式化(如用 System.out.printf 对齐字段)全放在单独的 TaskCLI 类里。它只调用 TaskManager 的方法,不碰 Task 的字段。

典型陷阱:

  • Scanner 声明为静态变量,导致多线程或重复初始化时异常;应每次需要时新建,或作为实例变量在构造时传入
  • 输入为空时没校验,nextLine() 返回空字符串,直接塞进 Task 构造器会存脏数据;加一句 if (title.trim().isEmpty()) { System.out.println("Title cannot be empty"); continue; }
  • 未处理 NumberFormatException:用户输入 "delete abc" 时,Integer.parseInt("abc") 会崩溃;必须包在 try-catch 里并提示友好错误

真正难的不是写完功能,而是让每层各司其职、边界清晰——模型不管怎么存,仓库不管怎么展示,命令行不管状态怎么流转。稍一越界,后面加导出 Excel 或 Web 接口时就全是补丁。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

606

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

241

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

621

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

797

2023.08.22

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

397

2023.09.04

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.11.27

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

75

2023.06.20

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 16万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号