目录
零. 概览
一. 抽象出图书管理系统所涉及的对象
1.1 Book
1.2 User
1.3 Operation
二. 实现 User 包中的对象
2.1 User父类
2.2 NormalUser 对象
2.3 AdminUser 对象
2.4 小总结(1)
三. 实现Book包中的对象
3.1 Book 对象
3.2 BookList 对象
四. 实现 Operation 包中的对象
4.1 IOperation 接口
4.2 操作类
4.3 接口 和 抽象类的比较
五. 整合操作
5.1 明确 进行 操作的用户
5.2 明确 对 bookList 进行的操作
六. 总结
零. 概览
最终要实现的就是如上图所示的效果, 不同级别的用户 对应 着不同的操作, 把每一本书都存储在一个容器中, 最终对这个容器进行增删查改... 操作.
一. 抽象出图书管理系统所涉及的对象
1.1 Book
Book包 中 包含:
a. Book 对象, 这是每一本书
b. BookList 对象, 最终肯定要对图书进行操作, 那么我们就需要 一个 "容器" 把每一本书(Book)存储起来, 这时, 就抽象出 书架 把书存储起来.
Book 包:
1.2 User
User包 中 包含:
a. NormalUser 对象, 普通用户, 进行一些 借阅, 查找 ... 的操作 并不对 书架进行操作(即不进行书的增删改).
b. AdminUser 对象, 管理员用户, 进行 书的增删改 ... 的操作, 本质上对 书架进行操作.
c. User 对象(父类), 把NormalUser 和 AdminUser 的共同属性抽取出来, 存放到 父类当中, 子类只需要继承User就好, 实现了代码的复用.
User 包:
1.3 Operation
Operation包 中 包含:
a. AddOperation 增加图书
b. DelOperation 删除图书
c. ShowOpreation 展示图书
d. FindOperation 查找图书
e. ExitOperation 退出系统
f. BorrowOperation 借阅图书
g. ReturnOperation 归还图书
h. IOperation 操作接口(包含公有的方法, 实现多态)
Operation 包:
二. 实现 User 包中的对象
2.1 User父类
name: 抽取出 不同级别用户的共性.
menu: 打印出 菜单, 设置成 抽象方法, 没有具体的实现.
这里有个小问题, menu的返回值为什么要被设置成为 int , 这是因为 这个菜单中的 功能被用户进行了选择, 最终要返回 一个 序号, 并根据这个序号来调用不同的 操作方法.
2.2 NormalUser 对象
menu方法: 在NormalUser 子类中 重写了父类中的 menu 方法, 并对应着NormalUser对象 特有的功能.
2.3 AdminUser 对象
menu 方法: 在 AdminUser子类中重写了 menu方法, 并对应着 AdminUser 对象特有的功能.
2.4 小总结(1)
在不同的子类中 重写 的menu类各不相同, 这体现了 多态(不同的对象进行同种操作时 所产生的状态各不相同.)
三. 实现Book包中的对象
3.1 Book 对象
Book 对象: Book类中定义了一本书的基本属性, 以及 这些属性 的 get 和 set 方法.(因为他们被 private 修饰, 是私有的).
3.2 BookList 对象
books: 实现了 组合, 创建了 books 书架, 用来 存储每一本书.
usedSize: 使用了 多少 书架的空间.
构造方法: 在构造方法中初始化了 userSize成员属性, 并初始化了书架, 最开始设置了三本书.
get and set 方法: 注意 这里的 getBook 和 setBook 是得到 pos 位置的书, 和 在 usedSize 位置 新设置一本书, 本质上还是对 书架进行操作.
四. 实现 Operation 包中的对象
在Operation 包中实现的都是一些 操作方法, 我们的重心不在 这里, 关于具体实现, 大家可以 去我的 码云 上 查看, 链接如下:Homework_JAVASE: 这是JAVASE学习阶段的课后作业! - Gitee.comhttps://gitee.com/nmbg11/bit_after_word_JAVASE/tree/master/j-20240523_JAVASE/src/Operation
4.1 IOperation 接口
注意接口中的方法默认被 public abstract 修饰, 是抽象方法, 在实现方法中必须被重写.
4.2 操作类
其他所有的操作类, 都是类似于 这样.
在 他们之中实现的都是各自的操作方法.
4.3 接口 和 抽象类的比较
这里 为什么 要将 IOperation设置成为接口, 而不把他设置成 抽象类 呢?
答: 在 这里 把 IOperation设置成为 接口 和 设置成 抽象类 都可以, 因为 这里的 实现类 都只需要 重写 一个 work 方法, 没有 涉及到 多实现.
一定要注意 接口和抽象类的区别, 接口 可以多实现, 而 在 java中抽象类(不只是抽象类, 所有的类) 不能够多继承.
五. 整合操作
接下来, 我们把 以上的多个对象 整合起来, 让他们 共同 实现图书管理系统.
5.1 明确 进行 操作的用户
根据 用户输入的 id 来返回 id 对应的对象. 最终使用 父类 user 来接受, 发生了 向上转型.
5.2 明确 对 bookList 进行的操作
不同 用户所能够进行的操作 不同.
根据 choice 来 调用指定的 work.
六. 总结
a. 文章主要 讨论的是 业务逻辑的实现, 不考虑一些 细节.
b. 首先 抽象出来 图书管理系统 中的对象.
c. 针对 各个对象, 实现他们各自的功能.
d. 最后 把 抽象出来的对象 进行 整合, 共同来实现图书管理系统.
图书管理系统的源码 在Gitee 中, 链接如下:
j-20240523_JAVASE/src · 伍炫昱/Homework_JAVASE - 码云 - 开源中国 (gitee.com)https://gitee.com/nmbg11/bit_after_word_JAVASE/tree/master/j-20240523_JAVASE/src