文章目录
1. 任务要求
基于之前的快递管理系统对其进行重构从而实现数据存储于客户端的分离
2. 代码分层
3. 关键代码
3.1 ExpressDao类(持久层操作类)
package com.java.Express12.dao;
import com.java.Express12.bean.Express;
import com.java.Express12.bean.Location;
import com.java.Express12.util.Tools;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
public class ExpressDao {
private ArrayList<Express> expressList = new ArrayList<Express>();
private Random random = new Random();
private int size = 0;
private static Tools tool = new Tools();
public void setExpressList(ArrayList<Express> expressList) {
this.expressList = expressList;
}
/**
* 添加存储快递
*
* @param e
* @return
*/
public boolean add(Express e) throws IOException {
//判断快递柜是否满了
if (size == 100) {
return false;
}
//生成x,y位置, x = random.nextInt(10) (0~9 随机生成)
int x = -1;
int y = -1;
//比较该位置无快递才能存入, 否则不结束循环(不断的重新生成)
while (true) {
x = random.nextInt(10);
y = random.nextInt(10);
if (!(expressList.contains(x) && expressList.contains(y))) {
break;
}
}
Location l = new Location();
l.setX(x);
l.setY(y);
e.setLocation(l);
expressList.add(e);
//生成取件码 (遍历取件码)
int code = randomCode();
e.setCode(code);
tool.storeExpress(expressList);
return true;
}
/**
* 模板方法设计模式 => 知道返回结果就先写个方法
*
* @return
*/
private int randomCode() {
//100000~999999 => 100000 +899999
while (true) {
int code = random.nextInt(900000) + 100000;
Express e = findByCode(code);
if (e == null) {
return code;
}
}
}
public Express findByNumber(String number) {
Express e = new Express();
e.setNumber(number);
for (Express express : expressList) {
String num = express.getNumber();
if (num.equals(number)) {
return express;
}
}
return null;
}
public Express findByCode(int code) {
for (Express express : expressList) {
int code1 = express.getCode();
if (code == code1) {
return express;
}
}
return null;
}
public void update(Express oldExpress, Express newExpress) throws IOException {
delete(oldExpress);
add(newExpress);
tool.storeExpress(expressList);
}
public void delete(Express e) throws IOException {
for (Express express : expressList) {
if (e.equals(express)) {
expressList.remove(express);
size--;
break;
}
}
tool.storeExpress(expressList);
}
public ArrayList<Express> findAll() throws IOException {
return tool.loadExpress();
}
}
3.2 Client客户端类
package com.java.Express12.cloud;
import com.java.Express12.bean.Express;
import com.java.Express12.view.Views;
import java.io.*;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author: Aleo阿乐
* @date: 2020/10/21
* @time: 15:40
*/
public class Client {
/**
* 声明视图类, 确保客户端尽量不涉及持久层操作(虽然有些还是偷了点懒)
*/
public static Views v = new Views();
public static void main(String[] args) throws IOException, ClassNotFoundException {
Scanner input = new Scanner(System.in);
// 传入本机地址和端口
Socket socket