任务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); } } } } }
测试