图书系统项目
一.模块划分介绍
Book-书籍相关模块
Constant-常量值模块
User-用户模块
Utils-工具相关模块
其中,LibrarySystem是程序入口
二.user模块
角色上,把图书系统分为管理员模块与普通用户模块,同时支持多普通用户进行登录。
每个用户的属性包括:姓名、ID、角色
2.1菜单方法的处理
public abstract class User { protected String name; // ⽤⼾名 protected int userID; // ⽤⼾ID protected String role; // ⽤⼾⻆⾊(管理员或普通⽤⼾) // 构造函数 public User(String name, int userID, String role) { this.name = name; this.userID = userID; this.role = role; } public String getName() { return name; } public int getUserID() { return userID; } public String getRole() { return role; } /** * 定义菜单⽅法 该⽅法打印菜单同时 输出菜单的选择 * @return */ public abstract int display(); }2.2AdminUser对象
public class AdminUser extends User{ public AdminUser(String name,int userID) { super(name,userID,"管理员"); } @Override public int display() { System.out.println("管理员 " + name + " 的操作菜单:"); System.out.println("1. 查找图书"); System.out.println("2. 打印所有的图书"); System.out.println("3. 退出系统"); System.out.println("4. 上架图书"); System.out.println("5. 修改图书"); System.out.println("6. 下架图书"); System.out.println("7. 统计借阅次数"); System.out.println("8. 查看最后欢迎的前K本书"); System.out.println("9. 查看库存状态"); System.out.println("10. 检查超过⼀年未下架的图书"); System.out.println("请选择你的操作:"); return scanner.nextInt(); } //其他操作⽅法 //上架图书 public void addBook() { } //图书修改 ⽀持修改书名 作者 类别 public void updateBook() { } //删除书籍 public void removeBook() { } //统计每本书的借阅次数 public void borrowCount() { } //查询最受欢迎的前n本书 public void generateBook() { } //查看库存状态 public void checkInventoryStatus() { } //并移除上架超过⼀年的图书 public void checkAndRemoveOldBooks() { } public void exit() { } }2.3NormalUser对象
public class NormalUser extends User { //如果是普通⽤⼾,这⾥写死 public NormalUser(String name, int userID) { super(name, userID, "普通⽤⼾"); } private void loadBorrowedBook() { } private void storeBorrowedBook() { } @Override public int display() { System.out.println("普通⽤⼾ " + name + " 的操作菜单:"); System.out.println("1. 查找图书"); System.out.println("2. 打印所有的图书"); System.out.println("3. 退出系统"); System.out.println("4. 借阅图书"); System.out.println("5. 归还图书"); System.out.println("6. 查看当前个⼈借阅情况"); System.out.println("请选择你的操作:"); return scanner.nextInt(); } //借阅图书 public void borrowBook() { } //归还图书 public void returnBook() { } // 查看个⼈借阅情况 public void viewBorrowBooks() { } }2.4LibrarySystem中整合当前⽤⼾相关信息
LibrarySystem类中每次通过new关键字来创建对象,如果有多个普通⽤⼾这⾥需要同样的代码new 很多次,代码会有⼀些重复。
public class LibrarySystem{ public static void main(String[] args) { // 直接创建管理员⽤⼾ User adminUser = new AdminUser("刘备", 1); // 直接创建普通⽤⼾ User normalUser1 = new NormalUser("关⽻", 2); User normalUser2 = new NormalUser("张⻜", 3); } }三.User模块-引⼊⼯⼚⽅法模式
在user包下创建factory包
1.创建⼯⼚接⼝
public interface IUserFactory { User createUser(String name, int userID); }2.创建具体的⼯程
public class AdminUserFactory implements IUserFactory{ @Override public User createUser(String name, int userID) { return new AdminUser(name,userID); } } public class NormalUserFactory implements IUserFactory{ @Override public User createUser(String name, int userID) { return new NormalUser(name,userID); } }3.修改LibrarySystem类
public class LibrarySystem{ public static void main(String[] args) { IUserFactory adminUserFactory = new AdminUserFactory(); User adminUser = adminUserFactory.createUser("刘备",1); IUserFactory normalUserFactory = new NormalUserFactory(); User normalUser1 = normalUserFactory.createUser("关⽻",2); User normalUser2 = normalUserFactory.createUser("张⻜",3); } }四.User模块-引⼊代理模式控制对象权限
通过代理真实的⽤⼾realUser通过构造⽅法进⾏传递。每⼀个操作通过权限检查进⾏调⽤。
public class ProxyUser { //被代理的真实⽤⼾ private User realUser; public ProxyUser(User user) { //对被代理的对象进⾏赋值 realUser = user; } public User getRealUser() { return realUser; } //其他操作 //调⽤菜单 public int display() { } //添加书籍操作 public void addBook() { } //更新书籍操作 public void updateBook() { } //移除图书 public void removeBook() { } //查看图书的借阅次数 public void borrowCount( ) { } //查看最受欢迎的前K本书 public void generateBook() { } //查看库存状态 public void checkInventoryStatus() { } //移除上架超过1年的书籍 public void checkAndRemoveOldBooks() { } //--------------普通相关⽅法---------------// //借阅图书 public void borrowBook() { //归还图书 public void returnBook() { } //查看个⼈借阅情况 public void viewBorrowHistory() { } }LibrarySystem类中进⾏整合
public class LibrarySystem{ public static void main(String[] args) { IUserFactory adminUserFactory = new AdminUserFactory(); User adminUser = adminUserFactory.createUser("刘备",1); IUserFactory normalUserFactory = new NormalUserFactory(); User normalUser1 = normalUserFactory.createUser("关⽻",2); User normalUser2 = normalUserFactory.createUser("张⻜",3); /** * 1.4 使⽤代理模式来管理权限 * 使⽤代理模式来控制 对象的访问 */ ProxyUser proxyUserAdmin = new ProxyUser(adminUser); ProxyUser proxyUserNormalG = new ProxyUser(normalUser1); ProxyUser proxyUserNormalZ = new ProxyUser(normalUser2); } }