Day13 接口

Day13 接口

生活中的接口

USB接口,插座口

Usb接口,需要满足接口的厚度和宽度

​ 遵守磁片的个数

插座 插头满足插座的个数

​ 电压、电流等。

4.2概念

接口是一种能力和约定

​ 1、接口的定义:代表某种能力

​ 2、方法的定义:能力的具体要求

接口可以多实现,用于扩充子类的能力。

1.1接口特点

与抽象类不同

1、接口不能创建对象,没有构造方法,动态代码块{},静态代码块static{}。

2、接口中,所有属性都是公开静态常量,隐式使用public static final修饰。

3、接口中,所有的方法都是公开抽象方法,隐式使用public abstract修饰。

与抽象类的相同

1、可以作为引用类型

2、不能创建对象

3、可以编译成字节码文件

1.2语法

关键字 interface,表示接口类型,与class类平级

public interface 接口名{
    //静态常量
    //抽象方法
}

1.3接口的实现

类与接口的关系 implements

代码实现

public interface Person{
   	void eat();//接口方法默认为public abstract修饰
}
	//       学生类    实现了      人类
public class Student implements Person{
    //必须重写接口中的抽象方法
    public void eat(){
        //方法体
    }
}
特别注意:一个类在实现接口的时候,并不影响继承
public class Boy extends Man implements Person{
  	public void eat(){
  		//方法体
  	}
}

接口规范:任何类在实现接口时,必须实现接口中的方法,否则类是抽象类

实现接口中的方法时,方法访问修饰符必须是public

1.4接口引用

跟父类一样,接口亦可声明为引用,并指向实现类对象。

public interface Person{
	void eat();
}
public class Student implements Person{
 public void eat(){
 }
}

public static void main(String[] args){
 Person p = new Student();//接口引用指向实现类对象
}

注意:此方式,仅可使用接口中声明的方法,不可调用子类独有的方法

​ 可转换为实现类类型,调用独有方法。

1.5关系

I. 类与类=继承 //单继承、多级继承

II. 接口与接口=继承 //多继承、多级继承

III. 类与接口=实现 //多实现

IV. 一个类在继承父类的同时,还可以实现多个接口,用以扩充此类的能力。

1.6接口的回调

先有接口的使用者,后有接口的实现者

在这里插入图片描述

1.7接口的好处

设计与实现完全分离

自然的使用多态

程序耦合度降低

更容易搭建框架程序

更容易更换具体实现

1.8常量接口

(img-n9beLKSo-1577615961470)]

1.7接口的好处

设计与实现完全分离

自然的使用多态

程序耦合度降低

更容易搭建框架程序

更容易更换具体实现

1.8常量接口

将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理

在“苍穹外卖 Day05”的开发过程中,用户端接口缺失的问题可能源于多个方面,包括接口设计不完整、后端未实现相关功能、前端调用逻辑缺失或接口文档更新滞后等。以下是一些可能的解决方案和原因分析: ### 1. 接口设计与业务需求不匹配 在开发初期,如果没有对用户端所需的功能进行完整的梳理,可能导致部分接口未被设计出来。例如,用户下单、查看订单状态、取消订单等功能如果没有明确的接口支持,就会导致前端无法正常调用。 **解决方案:** - 回顾产品原型文档,确认用户端所需的所有功能点。 - 根据业务规则补充接口设计文档,确保覆盖所有用户行为,如订单取消、购物车操作、历史订单查询等[^3]。 - 使用 Swagger 或 Knife4j 等工具生成接口文档,确保前后端开发人员对接一致。 ### 2. 后端接口未实现 即使接口设计完成,如果后端没有及时实现对应的 Controller 层方法、Service 层逻辑以及数据库操作,也会造成前端调用失败。 **解决方案:** - 检查 Mapper 接口和 XML 文件中的 SQL 是否正确实现,例如 `ShoppingCartMapper` 中的删除方法是否已经定义并正确映射[^2]。 - 在 Service 层中确认业务逻辑是否完整,例如 `OrderService` 中的 `userCancelById` 方法是否处理了订单状态判断、退款逻辑和数据更新[^4]。 - 验证 Controller 层是否将 Service 层的方法暴露为 RESTful API,确保 URL 映射正确,参数传递无误。 ### 3. 前端调用逻辑缺失 即使后端提供了接口,如果前端代码中没有对应的服务调用或页面事件绑定,用户也无法感知接口的存在。 **解决方案:** - 检查前端项目的 API 调用模块(如 `api.js` 或 `axios` 实例)是否包含所有必要的请求函数。 - 确保页面组件中的按钮点击事件、生命周期钩子等触发了正确的接口调用。 - 使用浏览器开发者工具查看网络请求,确认接口是否被正确调用,返回结果是否符合预期。 ### 4. 接口文档更新滞后 在团队协作开发中,接口文档如果没有及时更新,可能会导致前端开发人员依据旧版本文档进行开发,从而出现接口缺失的假象。 **解决方案:** - 定期同步接口文档,使用自动化工具(如 Swagger UI)展示最新接口信息。 - 在 Git 提交记录中标注接口变更内容,便于其他开发人员快速了解更新情况。 - 建立良好的沟通机制,确保前后端开发人员在接口变更时及时通知对方。 ### 5. 权限与路由配置问题 如果接口已经实现,但未正确配置权限或路由,也可能导致用户端访问不到相关接口。 **解决方案:** - 检查 Spring Security 或 Shiro 等权限框架的配置,确保用户端接口不需要登录即可访问,或者已正确设置 Token 认证机制。 - 验证网关或 Nginx 的路由配置,确保请求能够正确转发到后端服务。 ### 示例代码:订单取消接口实现 ```java // OrderController.java @RestController @RequestMapping("/user/order") public class OrderController { @Autowired private OrderService orderService; /** * 用户取消订单 * @param id 订单ID * @return */ @PutMapping("/cancel/{id}") public Result cancelOrder(@PathVariable Long id) { orderService.userCancelById(id); return Result.success(); } } ``` ```java // OrderServiceImpl.java @Service public class OrderServiceImpl implements OrderService { @Autowired private OrderMapper orderMapper; @Override public void userCancelById(Long id) throws Exception { // 查询订单是否存在 Orders ordersDB = orderMapper.getById(id); if (ordersDB == null) { throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND); } // 判断订单状态是否可取消 if (ordersDB.getStatus() > 2) { throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR); } Orders orders = new Orders(); orders.setId(ordersDB.getId()); // 如果是待接单状态,需退款 if (ordersDB.getStatus().equals(Orders.TO_BE_CONFIRMED)) { orders.setPayStatus(Orders.REFUND); } // 更新订单状态为已取消,并设置取消原因和时间 orders.setStatus(Orders.CANCELLED); orders.setCancelReason("用户取消"); orders.setCancelTime(LocalDateTime.now()); orderMapper.update(orders); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值