先找对象,设计类,然后在考虑流程
1.核心需求
用户分为两类:管理员,普通用户
管理员:
a)查阅书籍信息
b)增加书籍
c)删除书籍
d)查看所有书籍列表
e)退出程序
普通用户
a)查阅某个书籍的信息
b)借阅书籍
c)归还书籍
d)退出程序
2.由上面需求可以看出:有四个类:管理员、用户、书籍、书籍列表
所以先创建四个类:Admin,NormalUser,Book,BookList(红色标记)
还有7中操作:(蓝色标记),把这几个操作放入一个包(查询,增加)
3.丰富每个类的内容
接下来我们涉及用户操作,我们发现,每个操作可以写成一个类,在每个操作类中写一个work方法,方法参数是BookList,返回是void
既然这些操作都有一个特共性的方法work(),可以把他提取出来,做成一个接口,让其他操作类实现接口,重写接口的抽象方法。
package BookSystem.Operation;import BookSystem.BookList;public interface IOperation {public void work(BookList bookList);
}
当前IOperation这个接口把所有的用户统一规范起来,啥样的类可以作为一种用户操作?只要实现了IOperation接口。
package BookSystem.Operation;import BookSystem.BookList;public class AddOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("新增书籍");}}
package BookSystem;import BookSystem.Operation.*;public class Admin {public String name;//管理员能支持的操作,看起来是一个接口数组,实际上接口不能实例化//这个数组中的内容,指的是实现接口的实例public IOperation[] operations;//构造方法public Admin(String name) {this.name = name;//把不同类的实例放在一个数组里this.operations = new IOperation[]{new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),new ExitOperation()};}
}
普通类(NormalUser)
package BookSystem;import BookSystem.Operation.*;public class NormalUser {public String name;public IOperation[] operations;//构造方法public NormalUser(String name) {this.name = name;this.operations = new IOperation[]{new FindOperation(),new BorrowOperation(),new ReturnOperation(),new ExitOperation()};}
}
由于Admin和NormalUser中有共同的属性和方法,此时可以写一个User,让上面两个类继承
import BookSystem.operation.IOperation;//用来作为Admin和NormalUser的父类
//存放两种类的公共信息
//User类不应该被实例化,存在的目的是被继承,所以做成抽象类,防止不小心对User实例化
abstract public class User {public String name;public IOperation[] operations;}
}
public class Admin extends User {//创建构造方法public Admin(String name){//管理员能支持的操作,看起来是一个接口数组,实际上接口不能实例化//这个数组中的内容,指的是实现接口的实例this.name=name;this.operations= new IOperation[]{new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),new ExitOperation()};}}
package BookSystem;import BookSystem.Operation.*;import java.util.Scanner;public class NormalUser extends User{//构造方法public NormalUser(String name) {this.name = name;this.operations = new IOperation[]{new FindOperation(),new BorrowOperation(),new ReturnOperation(),new ExitOperation()};}}
如果多个类之间,公共部分只有方法,此时用接口
如果多各类之间,公共部分不光有方法,还有属性,此时用继承
package BookSystem;import BookSystem.Operation.*;abstract public class User {public String name;public IOperation[] operations;public abstract int menu();}
ackage BookSystem;import BookSystem.operation.*;import java.util.Scanner;public class Admin extends User{//创建构造方法public Admin(String name){//管理员能支持的操作,看起来是一个接口数组,实际上接口不能实例化//这个数组中的内容,指的是实现接口的实例this.name=name;this.operations= new IOperation[]{new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),new ExitOperation()};}@Overridepublic int menu() {System.out.println("==========");System.out.println("Hello!"+name+"欢迎你");System.out.println("1.查阅图书信息");System.out.println("2.新增书籍信息");System.out.println("3.删除书籍信息");System
本文发布于:2024-01-29 04:14:20,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647286512618.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |