Java---设计模式---遇见MVC-③

逻辑层:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层。

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();
	}
	//注入ebo
	private 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;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	
	@Override
	public 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;
	}
	@Override
	public 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;
	}
}



猜你喜欢

转载自blog.csdn.net/qq_34928644/article/details/79917361