面向接口编程详解
一、核心思想与定义
面向接口编程(Interface-Oriented Programming, IOP) 是一种通过定义接口规范模块行为,将 “做什么”(What) 与 “怎么做”(How) 分离的设计范式。其核心目标是:
- 解耦:切断模块间的直接依赖
- 契约化:明确交互规则
- 抽象层:隔离变化,隐藏实现细节
接口的本质:
- 技术契约:定义服务提供方和使用方必须遵守的规则
- 防火墙:防止实现细节污染上层逻辑
- 扩展锚点:为系统演进提供标准化接入点
二、设计精髓
1. 依赖抽象,而非具体
原则:上层模块不应依赖底层实现,而应依赖抽象接口。
价值:
- 修改底层实现无需改动上层代码
- 支持运行时动态替换实现
// ❌ 错误:直接依赖具体实现
class PaymentService {
private WechatPay payment = new WechatPay();
}
// ✅ 正确:依赖接口
class PaymentService {
private PaymentGateway payment; // 接口类型
public PaymentService(PaymentGateway payment) {
this.payment = payment;
}
}
2. 接口即边界
原则:模块间通过接口交互,禁止跨边界访问内部细节。
价值:
- 明确系统分层架构
- 限制代码腐化范围
// 数据访问层接口
public interface UserRepository {
User findById(Long id);
void save(User user);
}
// 业务层仅通过接口访问数据
public class UserService {
private UserRepository repository; // 不感知MyBatis/JPA实现
}
3. 接口组合优于继承
原则:通过组合多个接口实现功能复用,避免类继承的僵化性。
价值:
- 突破单继承限制
- 支持动态能力扩展
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
// 通过接口组合实现能力
class Duck implements Flyable, Swimmable {
// 实现两个接口方法
}
三、实践方法论
1. 接口定义规范
命名:
- 使用名词(
UserService)或形容词(Configurable) - 避免


1412

被折叠的 条评论
为什么被折叠?



