浅谈Java中的interface应用与面向接口编程

 更新时间:2023年10月10日 08:49:59   作者:zhangbeizhen18  
这篇文章主要介绍了浅谈Java中的interface应用与面向接口编程,Java的关键字interface应用,一个接口,多个实现类,面向接口编程,把业务逻辑线提取出来作为接口,具体的业务实现通过该接口的实现类来完成,需要的朋友可以参考下

前言

场景:Java的关键字interface应用,一个接口,多个实现类。面向接口编程,把业务逻辑线提取出来作为接口,具体的业务实现通过该接口的实现类来完成。

版本:JDK 1.8。

1.一个Java接口

(1)说明

使用Java关键字interface修饰的类型,就是接口。

接口里面方法一般没有函数体,实际就是抽象方法。

比如:String announceStart();

接口里面方法有函数体情况,一般使用default关键字修饰。

比如:default String holdSportGame() { ...}

(2)代码

public interface SportContest {
  //开场仪式
  String announceStart();
  //举行比赛
  ResultDto playGame();
  //颁奖仪式
  String announceEnd(ResultDto resultDto);
  //举行体育赛事
  default String holdSportGame() {
      String result01 = announceStart();
      ResultDto result02 = playGame();
      String result03 = announceEnd(result02);
      return result03;
  }
}

2.多个实现类实现同一个Java接口

实现Java接口使用implements关键字。

(1)实现类TableTennisContest

public class TableTennisContest implements SportContest {
    //赛事任务
    private TaskDto taskDto = null;
    public TableTennisContest(TaskDto taskDto) {
        this.setTaskDto(taskDto);
    }
    @Override
    public String announceStart() {
        TaskDto taskDto = this.getTaskDto();
        System.out.println("举行乒乓球比赛入场仪式:");
        System.out.println("步骤一: " + taskDto.getEventName() + "队员入场.");
        System.out.println("步骤二: 裁判员、教练员等各就各位.");
        return "乒乓球比赛进行中";
    }
    @Override
    public ResultDto playGame() {
        TaskDto taskDto = this.getTaskDto();
        System.out.println("举行乒乓球比赛: " + taskDto.getContent() + ",选手们在奋力搏击.");
        return ResultDto.builder().teamName("中国乒乓球队").content("女单决赛冠军").build();
    }
    @Override
    public String announceEnd(ResultDto resultDto) {
        System.out.println("举行颁奖仪式: ");
        System.out.println("步骤一: 为" + resultDto.getTeamName() + resultDto.getContent() + "颁发金牌.");
        System.out.println("步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.");
        return "乒乓球比赛圆满结束";
    }
    public TaskDto getTaskDto() {
        return this.taskDto;
    }
    public void setTaskDto(TaskDto taskDto) {
        this.taskDto = taskDto;
    }
}

(2)实现类SwimmingContest

public class SwimmingContest implements SportContest {
  //赛事任务
  private TaskDto taskDto = null;
  public SwimmingContest(TaskDto taskDto) {
      this.setTaskDto(taskDto);
  }
  @Override
  public String announceStart() {
      TaskDto taskDto = this.getTaskDto();
      System.out.println("举行游泳比赛入场仪式:");
      System.out.println("步骤一: " + taskDto.getEventName() + "队员入场.");
      System.out.println("步骤二: 裁判员、教练员等各就各位.");
      return "游泳比赛进行中";
  }
  @Override
  public ResultDto playGame() {
      TaskDto taskDto = this.getTaskDto();
      System.out.println("举行游泳比赛: " + taskDto.getContent() + ",选手们在冲刺记录.");
      return ResultDto.builder().teamName("中国游泳队").content("男子组200米决赛冠军").build();
  }
  @Override
  public String announceEnd(ResultDto resultDto) {
      System.out.println("举行颁奖仪式: ");
      System.out.println("步骤一: 为" + resultDto.getTeamName() + resultDto.getContent() + "颁发金牌.");
      System.out.println("步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.");
      return "游泳比赛圆满结束";
  }
  public TaskDto getTaskDto() {
      return this.taskDto;
  }
  public void setTaskDto(TaskDto taskDto) {
      this.taskDto = taskDto;
  }
}

3.示例测试

(1)说明

执行接口函数时,需先创建接口实现类的实例对象。

(2)代码

public class ApplyInterface {
  // 主函数入口
  public static void main(String[] args) {
    System.out.println("*******************************");
    holdSportGame(new TableTennisContest(TaskDto.builder().eventName("乒乓球比赛").content("女单决赛").build()));
    System.out.println("*******************************");
    holdSportGame(new SwimmingContest(TaskDto.builder().eventName("游泳比赛").content("男子200米决赛").build()));
    System.out.println("*******************************");
  }
  // 面向接口编程
  public static void holdSportGame(SportContest sportContest) {
      sportContest.holdSportGame();
  }
}

(3)输出结果

*******************************
举行乒乓球比赛入场仪式:
步骤一: 乒乓球比赛队员入场.
步骤二: 裁判员、教练员等各就各位.
举行乒乓球比赛: 女单决赛,选手们在奋力搏击.
举行颁奖仪式: 
步骤一: 为中国乒乓球队女单决赛冠军颁发金牌.
步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.
*******************************
举行游泳比赛入场仪式:
步骤一: 游泳比赛队员入场.
步骤二: 裁判员、教练员等各就各位.
举行游泳比赛: 男子200米决赛,选手们在冲刺记录.
举行颁奖仪式: 
步骤一: 为中国游泳队男子组200米决赛冠军颁发金牌.
步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.
*******************************

4.辅助实体类

(1)说明

在实体类中使用注解@Data等来自lombok-1.18.24.jar。

(2)TaskDto

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TaskDto implements Serializable {
    //赛事名称
    private String eventName;
    //活动内容
    private String content;
}

(3)ResultDto

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResultDto implements Serializable {
    //竞赛队伍
    private String teamName;
    //比赛成绩
    private String content;
}

到此这篇关于浅谈Java中的interface应用与面向接口编程的文章就介绍到这了,更多相关Java的interface面向接口编程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 继承与多态的深入理解

    Java 继承与多态的深入理解

    这篇文章主要介绍了Java 继承与多态的深入理解的相关资料,子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为,需要的朋友可以参考下
    2017-08-08
  • springboot+vue实现oss文件存储的示例代码

    springboot+vue实现oss文件存储的示例代码

    对象存储服务是一种海量、安全、低成本、高可靠的云存储服务,本文主要介绍了springboot+vue实现oss文件存储的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • mybatis trim标签的使用详解

    mybatis trim标签的使用详解

    这篇文章主要介绍了mybatis trim标签的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • SpringBoot+Mybatis plus实现多数据源整合的实践

    SpringBoot+Mybatis plus实现多数据源整合的实践

    本文主要介绍了SpringBoot+Mybatis plus实现多数据源整合的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • java byte数组与16进制间相互转换的示例

    java byte数组与16进制间相互转换的示例

    这篇文章主要介绍了java byte数组与16进制间相互转换的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • Java+Windows+ffmpeg实现视频转换功能

    Java+Windows+ffmpeg实现视频转换功能

    这篇文章主要为大家详细介绍了Java+Windows+ffmpeg实现视频转换功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Spring中@Qualifier注解的用法

    Spring中@Qualifier注解的用法

    但凡有点开发经验,多多少少可能都遇到过@Qualifier注解的使用场景,本文主要介绍了Spring中@Qualifier注解的用法,感兴趣的可以了解一下
    2023-11-11
  • 使用XSD校验Mybatis的SqlMapper配置文件的方法(1)

    使用XSD校验Mybatis的SqlMapper配置文件的方法(1)

    这篇文章以前面对SqlSessionFactoryBean的重构为基础,简单的介绍了相关操作知识,然后在给大家分享使用XSD校验Mybatis的SqlMapper配置文件的方法,感兴趣的朋友参考下吧
    2016-11-11
  • 在@Value注解内使用SPEL自定义函数方式

    在@Value注解内使用SPEL自定义函数方式

    这篇文章主要介绍了在@Value注解内使用SPEL自定义函数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java实现给Word文件添加文字水印

    Java实现给Word文件添加文字水印

    Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果。本文将利用Java给Word每一页设置不同文字水印效果,需要的可以参考一下
    2022-02-02

最新评论