提供给客户端代码的API与为开发商提供的API要有所不同
给用户开发者API ,为开发设计者提供注册插件扩展功能方式是SPI(Service Provider Interface)
1、C和Java语言中如何定义API和SPI
C语言中函数指针
Java中的接口
2、API演进不同于SPI
API中添加内容是容许的,移除是不容许的
SPI中添加内容是有损的,移除是可以的
3、java.io.writer 从jdk1.4到jdk1.5演进
反射解决兼容性
给客户使用的API,最好用final类,不容许继承
设计SPI时候,最好用接口,结合工厂模式,不容许代理
4、合理分解API
API也要分类
原则
把有关联的方法防止在同一个类中
对于无关的方法,不因一时找不到合适位置,随便放
把有关联的类防止在同一个包中
把一些只有特殊场景下才用到的类转移到其他地方
API集合有不同受众,要根据受众分类
api与spi间要划一条泾渭分明的界限
netbeans项目把API划分四类
- 核心类型API
- 支持类型API
- 核心类型SPI
- 支持类型SPI