Interface(接口)
Definition
Interface(接口)是系统之间进行交互的边界。
它定义:
- 可以做什么(What)
- 如何使用(How to interact)
但不暴露:
- 内部如何实现(How it works)
简单理解:
Interface 是不同系统或模块之间约定的通信方式。
Types
Interface 可以根据交互对象不同分为:
为什么需要 Interface?
复杂系统通常由多个部分组成。
如果每个部分直接依赖其他部分的实现:
flowchart TD ModA["Module A"] -->|直接依赖| Impl["Module B 内部实现"]
会导致:
- 高耦合
- 难以修改
- 难以扩展
通过 Interface:
flowchart TD ModA["Module A"] --> IF["Interface"] IF --> Impl["Module B Implementation"]
A 只依赖接口,而不是具体实现。
Interface 与 Abstraction 的关系
二者经常一起出现。
Abstraction
关注:
隐藏什么?
例如:
Socket 隐藏:
- TCP 状态
- 网络设备
- 数据传输细节
Interface
关注:
如何使用?
例如:
Socket API:
socket()
connect()
send()
recv()
关系:
flowchart TD Impl["Implementation"] --> Abs["Abstraction"] Abs --> IF["Interface"] IF --> User["User"]
Interface 的核心作用
1. 隔离实现
使用者只依赖接口:
flowchart TD App["Application"] -->|Socket API| Impl["Network Implementation"]
网络实现变化:
- TCP
- UDP
- Unix Domain Socket
应用程序不需要改变。
2. 降低耦合
没有接口:
flowchart TD A["A"] --> B["B内部结构"]
B 修改:
A 必须修改
有接口:
flowchart TD A["A"] --> IF["Interface"] IF --> B["B"]
B 可以替换实现。
3. 支持替换实现
例如:
数据库接口:
flowchart TD IF["Database Interface"] --> MySQL["MySQL"] IF --> PostgreSQL["PostgreSQL"] IF --> SQLite["SQLite"]
上层代码只依赖接口。
计算机系统中的 Interface
1. API(Application Programming Interface)
应用程序接口:
flowchart TD App["Application"] -->|API| Lib["Library / OS"]
例如:
printf()
open()
socket()
2. ABI(Application Binary Interface)
二进制接口:
flowchart TD Prog["Program"] -->|ABI| Code["Compiled Code"]
负责:
- 函数调用约定
- 数据布局
- 二进制兼容
3. System Call Interface
用户程序和操作系统之间:
flowchart TD User["User Space"] -->|System Call Interface| Kernel["Kernel"]
例如:
open()
read()
fork()
4. Socket Interface
网络通信接口:
flowchart TD App["Application"] -->|Socket API| Stack["TCP/IP Stack"]
应用程序不需要了解:
- 数据包如何传输
- 路由如何选择
Interface 与 Implementation
核心关系:
flowchart TD Concept["Concept"] --> IF["Interface"] IF --> Impl["Implementation"]
例如:
文件
Concept:
Storage
Interface:
read()
write()
Implementation:
Disk File
Pipe
Socket
Socket
Concept:
Communication Endpoint
Interface:
socket()
send()
recv()
Implementation:
TCP Socket
Unix Domain Socket
Interface 的抽象层次
计算机系统中存在大量接口:
flowchart TD App["Application"] -->|API| Lib["Library"] Lib -->|ABI| Comp["Compiler"] Comp -->|ISA| CPU["CPU"] CPU --> HW["Hardware"]
每一层通过接口连接。
Interface 的设计思想
好的 Interface:
稳定
实现可以变化。
接口尽量保持稳定。
简洁
暴露必要能力。
隐藏无关细节。
可组合
不同模块可以通过接口连接。
常见误区
Interface 不等于 Implementation
例如:
USB
不是:
USB Controller 的具体实现
而是:
通信标准和接口规范。
Interface 不等于 API
API 是 Interface 的一种。
Interface 范围更广:
包括:
- API
- ABI
- Protocol Interface
- Hardware Interface
Summary
Interface(接口):
系统之间约定交互方式的边界,用于隐藏实现细节、降低耦合,并允许不同实现进行替换。
核心关键词:
- Boundary
- Contract
- Decoupling
- Replaceability
- Abstraction
关联概念
- API:应用程序编程接口
- ABI:应用程序二进制接口
- Socket:通信端点接口
- Abstraction:抽象思想