VE设计#9 改进版 数据层接口版

在数据层中我们只用接口,而功能是在它的实现类中实现的。因此我们改了数据层,对应调用数据层的逻辑层我们也要改过。

改进后的数据层是一个接口:如代码所示:

package cn.hncu.dao;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public interface addressDao {
	public  Object[] read(String fileName); 
	public  boolean write(String fileName,Object[] objs);

}
而真正的实现方法在它的实现类:

package cn.hncu.dao;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class addReadAndWriteDao implements addressDao{

	@Override
	public  Object[] read(String fileName) {
		ArrayList<Object> list=new ArrayList<Object>();
		ObjectInputStream in=null;
		try {
			in=new ObjectInputStream(new FileInputStream(fileName));
			while(true){
				list.add(in.readObject());
			}
		} catch (Exception e) {
			
		}finally{
			try {
				if(in!=null){
					in.close();
				}
			} catch (IOException e) {
				throw new RuntimeException("关流失败");
			}
		}
		Object objs[]=list.toArray();
		if(objs==null){
			return objs=new Object[0];
		}
		return objs;
	}

	@Override
	public boolean write(String fileName, Object[] objs) {
		ObjectOutputStream out=null;
		try {
			out=new ObjectOutputStream(new FileOutputStream(fileName));
			for(Object obj:objs){
				out.writeObject(obj);
			}
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}finally{
			try {
				if(out!=null){
					out.close();
				}
			} catch (IOException e) {
				throw new RuntimeException("关流失败");
			}
		}
		return true;
	}
	
}

对应位置的逻辑层也做了更改,用/*改动版*/标示。

package cn.hncu.busines;

import java.util.TreeMap;

import javax.swing.JOptionPane;

import cn.hncu.dao.addReadAndWriteDao;
import cn.hncu.dao.addressDao;

public class Myset {
	//1
	private final String FILE_NAME="a.date";
	
	private static Object objs[]=new Object[0] ;
	public boolean add(Object obj){
		if(contains(obj)){
			return false;
		}
		Object temp[]=new Object[objs.length+1];
		System.arraycopy(objs, 0, temp, 0, objs.length);
		temp[objs.length]=obj;
		objs=temp;
		temp=null;
		//2
		return save();
	}
	public Object[] getAll(){
		//3
//		objs=addressDao.read(FILE_NAME);
		/*改动版*/
		addressDao dao=new addReadAndWriteDao();
		objs=dao.read(FILE_NAME);
		
		return objs;
	}
	public boolean contains(Object obj){
		for(Object temp:objs){//obj就是DumpCase对象
			if(temp.equals(obj)){
				return true;
			}
		}
		return false;
	}
	public int size(){
		return objs.length;
	}
	public boolean delete(Object obj){
		if(!contains(obj)){
			return false;
		}
		Object[] temps=new Object[objs.length-1];
		int k=0;
		for(int i=0;i<objs.length;i++){
			if(!objs[i].equals(obj)){
				temps[k++]=objs[i];
			}
		}
		objs=temps;
		//4
		return save();
	}
	public boolean update(Object newObj , Object oldObj){
		for(int i=0;i<objs.length;i++){
			if(objs[i].equals(oldObj)){
				objs[i]=newObj;
				//5
				return save();
			}
		}
		
		return false;
	}
	public Object[] query(String name,String age,String address){
		Object[] temps=new Object[objs.length];
		int k=0;
		for (int i = 0; i < objs.length; i++) {
			String strObj=(String) objs[i];
			String strs[]=strObj.split(",");
			if(name!=null&&name.trim().length()>0){
				if(!strs[0].contains(name)){
					continue;
				}
			}
			if(age!=null&&age.trim().length()>0){
				if(!strs[1].equals(age)){
					continue;
				}
			}
			if(address!=null&&address.trim().length()>0){
				if(!strs[2].contains(address)){
					continue;
				}
			}
			temps[k++]=objs[i];
		}
		Object temps2[]=new Object[k];
		System.arraycopy(temps, 0, temps2, 0, k);
		return temps2;
	}
	//6
	public boolean save(){
		
		addressDao dao=new addReadAndWriteDao();
		boolean result2=dao.write(FILE_NAME, objs);
		/*改动版*/
		
//		boolean result=addressDao.write(FILE_NAME,objs);
		if(result2==false){
			JOptionPane.showMessageDialog(null, "存儲失敗");
			return false;
		}
		return true;
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值