定义与实现解耦,运行时加载实现
代表性实现方式就是java里面的SPI机制。比如mysql的驱动mysql-connector-java里面有个MATA-INF/services目录,里面定义具体驱动类,这些驱动类都实现Driver类接口。
如下图所示:
驱动加载类如下:
- 系统的可扩展性可以遵循标准、识别、注册、运行总的法则去演化不同的具体的实现,可以根据实际的场景选择合适的方法,不再是 SPI,思维就会打开很多。如 Spring 通过 PostProcessor 开放了用户自定义的业务逻辑,它的流程也是遵循上面的八个字"标准、识别、注册、运行"。
- 什么是框架?:有固定的流程,并且对用户开放业务逻辑的半成品