书店管理系统中对uuid的获取
每添加一个用户时希望能够有系统分配id,或者是每添加一本书籍
在书店管理系统中有7个需要分配id的版块:UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,
OutInDetailModel。
这里我们使用枚举法对发个版块分别分配id进行操作。
其包结构如下
第一步写出uuid的枚举类UuiModelConstance
public enum UuidModelConstance {
USER("UserModel"),
BOOK("BookModel"),
IN_MAIN("InMainModel"),
IN_DETAIL("InDetailModel"),
OUT_MAIN("OutMainModel"),
OUT_DETAIL("OutDetailModel"),
STOCK("StockModel");//枚举中所含的项
private final String name;//枚举中定义的变量都是final类型,所以只有gettter函数
//枚举中的权限是private,可以不写但是java会自动帮我们加
private UuidModelConstance(String name){//构造枚举this.name=name;
}
public String getName() {
return name;
}
}
第二步写出uuid值对象的封装UuidModel(包含modelName和currentName变量);
public class UuidModel implements Serializable {//第一步值对象都要借口Serializable实现可序化
private String modelName;//变量的声明属于private
private int currentName;
public UuidModel(){//必须实现一个空参构造
}
public String getModelName() {//实现setter和getter函数
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public int getCurrentName() {
return currentName;
}
public void setCurrentName(int currentName) {
this.currentName = currentName;
}
//以 currentName为主关键字构造hashCode和equal方法
@Override
public int hashCode() {final int prime = 31;
int result = 1;
result = prime * result + currentName;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UuidModel other = (UuidModel) obj;
if (currentName != other.currentName)
return false;
return true;
}
}
第三步写DAO完成具体的实现
DAO主要包括三个部分
1、dao包写一个interface类写出需要实现的方法
public interface UuidDAO {
public String getNextNum(UuidModelConstance model);//获取需要得到id的模块名
}
2、impl包implements dao中的类具体实现方法
public class UuidDAOimpl implements UuidDAO{
private final String FILE_NAME="Uuid.txt";//将记录放到一个叫Uuid.txt的文件中
@Override
public String getNextNum(UuidModelConstance model) {//实现interface类中的方法
String modelName=model.getName();//获取要使用uuiddao的模块名
List<UuidModel> list=fileIoutil.readfile(FILE_NAME);//读取文件内容
for(UuidModel uuid:list){
if(uuid.getModelName().trim().equals(modelName)){//如果存在
int num=uuid.getCurrentName();//获取当前uuid的num
uuid.setCurrentName(num+1);//每调用一次uuid加1
fileIoutil.write(list, FILE_NAME);//重新写入
return String.valueOf(num);//将num转换成字符串
}
}
//程序运行到这里说明之前次模块并没有调用过uuidDAO
UuidModel uuid=new UuidModel();//创建uuidModel对象
uuid.setCurrentName(num);
uuid.setModelName(modelName);
list.add(uuid);
fileIoutil.write(list, FILE_NAME);
return ""+num;//返回字符串
}
}
3、factory工厂包,通过工厂调用impl中的方法(模块调用语句UuidDaoFactory .getUuidDAO.getNextNum())
public class UuidDaoFactory {
public static UuidDAO getUuidDAO(){
return new UuidDAOimpl();
}
}
在其他类的Ebo中通过String uuid=UuidDaoFactory.getUuidDAO().getNextNum(UuidModelConstance.USER);获取uuid