抽象类在项目中的实际应用

发布时间 2023-08-14 20:20:30作者: 四十四次日落95

一.抽象类和接口的区别?

1. 接⼝的⽅方法默认是 public ,所有⽅方法在接⼝口中不不能有实现(Java 8 开始接⼝口⽅方法可以有默认实现),⽽而抽象类
可以有⾮非抽象的⽅方法。

2.接⼝口中除了了 static 、 final 变量量,不不能有其他变量量,⽽而抽象类中则不不⼀一定。

3.⼀一个类可以实现多个接⼝口,但只能实现⼀一个抽象类。接⼝口⾃自⼰己本身可以通过 extends 关键字扩展多个接⼝口。

4.接⼝口⽅方法默认修饰符是 public ,抽象⽅方法可以有 public 、 protected 和 default 这些修饰符(抽象⽅方法就是

为了了被重写所以不不能使⽤用 private 关键字修饰!)。

5. 从设计层⾯面来说,抽象是对类的抽象,是⼀一种模板设计,⽽而接⼝口是对⾏行行为的抽象,是⼀一种⾏行行为的规范。

二.项目中抽象类的实际应用

背景:项目以不同方式,如消息队列,读取数据库,调用接口等组合存储数据到数据库,实际上步骤可以抽象出来一套统一的模板。

public abstract class BaseProcessTpData<T, R> {private int intervalDays = 1;

    public int getIntervalDays() {
        return intervalDays;
    }

    public void setIntervalDays(int intervalDays) {
        this.intervalDays = intervalDays;
    }

    public void process(String date) {
        process(date, true);
    }
   //处理过程
    public void process(String date, boolean isDeleteData) {
        long executeCount = 0;
try {
            LocalDateTime startTime = DateTimeUtil.stringToTime(date);
            LocalDateTime endTime = startTime.plusDays(getIntervalDays());
            while (startTime.isBefore(endTime)) {

//获取数据 List<T> list = getDataFromDb(startTime, startTime.plusSeconds(getIntervalSeconds())); if (!CollectionUtils.isEmpty(list)) {
//组装数据 List
<R> dbList = convertToDbEntity(list);
//插入数据 insertToDb(dbList); executeCount
+= dbList.size(); } startTime = startTime.plusSeconds(getIntervalSeconds()); } } catch (Exception ex) { } }
    抽象类中的抽象方法
     * 每次查询间隔时间(单位:秒)
    protected abstract long getIntervalSeconds();

     * 从db获取数据
    protected abstract List<T> getDataFromDb(LocalDateTime startTime, LocalDateTime endTime) throws SQLException;

     * 处理数据
    protected abstract List<R> convertToDbEntity(List<T> list) throws Exception;

     * 插入数据
    protected abstract boolean insertToDb(List<R> list) throws SQLException;

     * 删除数据
    protected abstract int deleteData(String date) throws SQLException;

     * 数据类型
    protected abstract String getDataType();