文章目录
- 任务6
- 【任务6.1】创建数据分析接口
- 【任务6.2】创建数据过滤抽象类
- 【任务6.3】编写日志数据分析类
- 【任务6.4】创建日志数据分析测试类,测试任务6.1-6.3中的程序,演示日志信息的采集、分析及打印输出
任务6
【任务6.1】创建数据分析接口
在com.qst.dms.gather 下创建接口IDataAnalyse.java
功能要求:
- 包含的抽象方法如下
// 进行数据匹配
Object[] matchData();
程序设计
package com.qst.dms.gather;
public interface IDataAnalyse {
Object[] matchData();
}
【任务6.2】创建数据过滤抽象类
在com.qst.dms.gather 下创建抽象类DataFilter.java
功能要求:
- 成员属性如下
// 数据集合
private DataBase[] datas;
-
构造方法、get/set方法
-
抽象方法
// 数据过滤抽象方法
public abstract void doFilter();
程序设计
package com.qst.dms.gather;
import com.qst.dms.entity.DataBase;
import com.qst.dms.entity.LogRec;
public abstract class DataFilter {
// 数据集合
private DataBase[] datas;
// 构造方法
public DataFilter(DataBase[] datas) {
this.datas = datas;
}
// 获取数据集合
public DataBase[] getDatas() {
return datas;
}
// 设置数据集合
public void setDatas(DataBase[] datas) {
this.datas = datas;
}
// 数据过滤抽象方法
public abstract void doFilter();
}
【任务6.3】编写日志数据分析类
在com.qst.dms.gather 下创建LogRecAnalyse.java,继承DataFilter抽象类,实现数据分析IDataAnalyse接口
功能要求:
- 成员属性如下
// “登录”集合
private LogRec[] logIns;
// “登出”集合
private LogRec[] logOuts;
- 实现DataFilter抽象类中的过滤抽象方法
// 获取数据集合
……
// 根据日志登录状态统计不同状态的日志个数
int numIn = 0;
int numOut = 0;
// 遍历统计
……
// 创建登录、登出数组
logIns = new LogRec[numIn];
logOuts = new LogRec[numOut];
// 数组下标记录
int indexIn = 0;
int indexOut = 0;
// 遍历,对日志数据进行过滤,根据日志登录状态分别放在不同的数组中
for (LogRec rec : logs) {
……
}
- 实现IDataAnalyse接口中数据分析方法
// 创建日志匹配数组
MatchedLogRec[] matchLogs = new MatchedLogRec[logIns.length];
// 日志匹配数组下标记录
int index = 0;
// 数据匹配分析
for (LogRec in : logIns) {
for (LogRec out : logOuts) {
if ((in.getUser().equals(out.getUser()))
&& (in.getIp().equals(out.getIp()))
&& out.getType()!=DataBase.MATHCH) {
//修改in和out日志状态类型为“匹配”
in.setType(DataBase.MATHCH);
out.setType(DataBase.MATHCH);
//添加到匹配数组中
matchLogs[index++] = new MatchedLogRec(in, out);
}
}
}
return matchLogs;
程序设计
package com.qst.dms.gather;
import com.qst.dms.entity.DataBase;
import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
public class LogRecAnalyse extends DataFilter implements IDataAnalyse {
// “登录”集合
private LogRec[] logIns;
// “登出”集合
private LogRec[] logOuts;
public LogRecAnalyse(LogRec[] datas) {
super(datas);
}
// 实现DataFilter抽象类中的过滤抽象方法
@Override
public void doFilter() {
// 获取数据集合
LogRec[] datas = (LogRec[]) getDatas();
// 根据日志登录状态统计不同状态的日志个数
int numIn = 0;
int numOut = 0;
// 遍历统计
for (LogRec data : datas) {
if (data.getLogType() == LogRec.LOG_IN) {
numIn++;
} else if (data.getLogType() == LogRec.LOG_OUT) {
numOut++;
}
}
// 创建登录、登出数组
logIns = new LogRec[numIn];
logOuts = new LogRec[numOut];
// 数组下标记录
int indexIn = 0;
int indexOut = 0;
// 遍历,对日志数据进行过滤,根据日志登录状态分别放在不同的数组中
for (LogRec data : datas) {
if (data.getLogType() == LogRec.LOG_IN) {
logIns[indexIn++] = data;
} else if (data.getLogType() == LogRec.LOG_OUT) {
logOuts[indexOut++] = data;
}
}
}
// 实现IDataAnalyse接口中数据分析方法
@Override
public Object[] matchData() {
// 创建日志匹配数组
MatchedLogRec[] matchLogs = new MatchedLogRec[logIns.length];
// 日志匹配数组下标记录
int index = 0;
// 数据匹配分析
for (LogRec in : logIns) {
for (LogRec out : logOuts) {
if ((in.getUser().equals(out.getUser()))
&& (in.getIp().equals(out.getIp()))
&& out.getType() != DataBase.MATHCH) {
// 修改in和out日志状态类型为“匹配”
in.setType(DataBase.MATHCH);
out.setType(DataBase.MATHCH);
// 添加到匹配数组中
matchLogs[index++] = new MatchedLogRec(in, out);
}
}
}
return matchLogs;
}
}
【任务6.4】创建日志数据分析测试类,测试任务6.1-6.3中的程序,演示日志信息的采集、分析及打印输出
在com.qst.dms.dos 下创建EntityDataDemo.java
功能要求:
采集3组日志信息,放到数组中,进行日志分析、过滤,对于匹配的日志信息打印输出
// 创建一个日志业务类
// 创建一个日志对象数组,用于存放采集的三个日志信息
// 创建日志数据分析对象
;
// 日志数据过滤
;
// 日志数据匹配分析
;
// 判断objs数组是否是配置日志数组
if (objs instanceof MatchedLogRec[]) {
// 将对象数组强制类型转换成配置日志数组
;
// 输出匹配的日志信息
;
}
程序设计
package com.qst.dms.dos;
import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
import com.qst.dms.gather.LogRecAnalyse;
import com.qst.dms.service.LogRecService;
public class EntityDataDemos {
public static void main(String[] args) {
// 创建一个日志业务类
LogRecService logService = new LogRecService();
// 创建一个日志对象数组,用于存放采集的三个日志信息
LogRec[] logs = new LogRec[3];
// 采集日志信息,将采集到的日志对象存放到logs数组中
logs[0] = logService.inputLog();
logs[1] = logService.inputLog();
logs[2] = logService.inputLog();
// 创建日志数据分析对象
LogRecAnalyse logAnalyse = new LogRecAnalyse(logs);
// 日志数据过滤
logAnalyse.doFilter();
// 日志数据匹配分析
Object[] objs = logAnalyse.matchData();
// 判断objs数组是否是配置日志数组
if (objs instanceof MatchedLogRec[]) {
// 将对象数组强制类型转换成配置日志数组
MatchedLogRec[] matchedLogs = (MatchedLogRec[]) objs;
// 输出匹配的日志信息
for (MatchedLogRec log : matchedLogs) {
if(log!=null) {
System.out.println(log);
}
}
}
}
}
测试