逻辑层:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层。
package cn.hncu.addr.business;import java.util.ArrayList;
import java.util.List;import cn.hncu.addr.dao.AddressDAO;
import cn.hncu.addr.vo.AddressQueryVO;
import cn.hncu.addr.vo.AddressUser;public class MyList {private static List<AddressUser> list = null;static{list = new AddressDAO().read();}//注入eboprivate AddressDAO ebo = new AddressDAO();public boolean add(AddressUser addressUser) {if (list.contains(addressUser)) {return false;}boolean boo =list.add(addressUser);return boo?ebo.save(list):false;}public Object[] toArray(){return list.toArray();}public boolean delete(AddressUser oldAddressUser) {boolean boo = list.remove(oldAddressUser);return boo?ebo.save(list):false;}public boolean update(AddressUser addressUser) {int index =list.indexOf(addressUser);return list.set(index, addressUser)==null?false:ebo.save(list);}public List<AddressUser> query(AddressQueryVO queryVO) {List<AddressUser> resList = new ArrayList<AddressUser>();for (int i = 0; i < list.size(); i++) {//卫条件---反逻辑//模糊查询//检验查询条件是否有效if (queryVO.getName()!=null&&queryVO.getName().length()>0) {//如果不包含查询的名字则剔除if (!list.get(i).getName().contains(queryVO.getName())) {continue;}}//范围查询---小于小的,大于大的//检验查询条件是否有效if (queryVO.getAge()>0) {//如果小于查询范围的最小值则剔除if (list.get(i).getAge()<queryVO.getAge()) {continue;}}//检验查询条件是否有效if (queryVO.getAge2()>0) {//如果大于查询范围的最大值则剔除if (list.get(i).getAge()>queryVO.getAge2()) {continue;}}//模糊查询//检验查询条件是否有效if (queryVO.getAddress()!=null&&queryVO.getAddress().length()>0) {if (!list.get(i).getAddress().contains(queryVO.getAddress())) {continue;}}//能到这里说明是想要的元素resList.add(list.get(i));}return resList;}
}
数据层:实现数据持久化、实现对象和持久化数据的双向映射。
package cn.hncu.addr.dao;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;import cn.hncu.addr.vo.AddressUser;
//采用文件存储对象的方式
//实现存储对象需实现序列化接口
public class AddressDAO {final String FILE_NAME = "address.dat";//向文件中存储数据public boolean save(List<AddressUser> list){ObjectOutput out = null;try {out = new ObjectOutputStream(new FileOutputStream(FILE_NAME));for (int i = 0; i < list.size(); i++) {out.writeObject(list.get(i));}return true;} catch (FileNotFoundException e) {throw new RuntimeException("数据库加载失败!");} catch (IOException e) {throw new RuntimeException("数据库繁忙,请稍后再试!");}finally {if (out!=null) {try {out.close();} catch (IOException e) {throw new RuntimeException("数据库发生严重错误!");}}}}//从文件中读取数据public List<AddressUser> read(){List<AddressUser> resList = new ArrayList<AddressUser>();ObjectInput in = null;File file = new File(FILE_NAME);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {throw new RuntimeException("软件出错!!!");}}try {in = new ObjectInputStream(new FileInputStream(file));while (true) {try {resList.add((AddressUser)in.readObject());} catch (Exception e) {break;}}return resList;} catch (FileNotFoundException e) {throw new RuntimeException("数据库访问失败!");} catch (IOException e) {throw new RuntimeException("数据库繁忙...");}finally{if (in!=null) {try {in.close();} catch (IOException e) {throw new RuntimeException("数据库发生严重错误!!!");}}}}
}
值对象层(VO):对数据进行封装
AddressUser类:
package cn.hncu.addr.vo;import java.io.Serializable;public class AddressUser implements Serializable{private String name;private int age;private String address;public AddressUser() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;AddressUser other = (AddressUser) obj;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return name + "," + age + "," + address;}}
AddressQueryVO类:
package cn.hncu.addr.vo;public class AddressQueryVO extends AddressUser{private int age2;public int getAge2() {return age2;}public void setAge2(int age2) {this.age2 = age2;}
}