在 Java 中,**API 接口的“扩展”**通常可以从 接口本身、实现方式、架构设计 三个层面来理解。下面我按常见场景给你一个比较系统的说明,并配合示例。
Java 接口支持 多继承,这是一个最标准的扩展方式。
public interface BaseApi {
void create();
void delete();
}
public interface UserApi extends BaseApi {
void updateUser();
void getUser();
}
✅ 特点:
UserApi 拥有 BaseApi 的所有方法如果你不能修改已有实现类,可以用 default 方法扩展接口。
public interface OrderApi {
void createOrder();
default void cancelOrder() {
System.out.println("默认取消订单逻辑");
}
}
✅ 使用场景:
⚠️ 注意:
default 方法不适合复杂业务逻辑public interface PayApi {
void pay();
}
public class AbstractPayApi implements PayApi {
protected void beforePay() {
System.out.println("支付前校验");
}
}
public class WeChatPayApi extends AbstractPayApi {
@Override
public void pay() {
beforePay();
System.out.println("微信支付");
}
}
✅ 好处:
对外暴露一个统一 API,内部组合多个接口。
public interface OrderFacadeApi {
void createOrder();
void payOrder();
}
public class OrderFacadeApiImpl implements OrderFacadeApi {
private OrderApi orderApi;
private PayApi payApi;
public void createOrder() {
orderApi.createOrder();
}
public void payOrder() {
payApi.pay();
}
}
✅ 适合:
public interface DiscountApi {
double calculate(double price);
}
public class VipDiscount implements DiscountApi {
public double calculate(double price) {
return price * 0.8;
}
}
✅ 优点:
/v1/users
/v2/users
或:
public interface UserApiV1 {
User getUser();
}
public interface UserApiV2 {
UserDto getUser();
}
✅ 常用于:
public interface UserControllerApi {
UserDTO getUser(Long id);
}
@RestController
public class UserController implements UserControllerApi {
public UserDTO getUser(Long id) {
return ...
}
}
✅ 好处:
✅ 优先使用 接口继承
✅ 避免修改已有接口(开闭原则)
✅ default 方法只用于“小扩展”
✅ 公共逻辑下沉到抽象类或工具类
| 场景 | 推荐方式 |
|---|---|
| 增加新能力 | 接口继承 |
| 老接口不能改 | default 方法 |
| 复用公共逻辑 | 抽象类 |
| 多个 API 组合 | Facade |
| 行为可变 | 策略模式 |
| 对外 API | 版本号 / DTO |
如果你有 具体场景(比如:Spring Boot、微服务、SDK、对外接口、老系统改造),可以直接告诉我,我可以给你 更贴近实战的设计方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。