库API设计中用户需实现子类或函数的模式是否有特定称谓?
这种模式的常见名称及辨析
你提到的这种「库定义抽象契约(基类/接口),用户实现具体逻辑后将实例交还给库执行」的模式,有几个常用的名称,我帮你梳理清楚:
1. Service Provider Pattern(服务提供者模式)
你提到Java的SPI(Service Provider Interface)是这个模式的标准化实现,但其实这个模式本身并不局限于Java或插件架构。和纯插件架构的区别在于:
- 插件架构通常是动态加载外部组件(比如从jar/动态库加载),而这个模式更侧重代码层面的契约实现——用户直接在业务代码里实现抽象类/接口,把实例传给库,不需要额外的动态加载机制。
- 很多非Java的库也在使用这个模式,只是没叫「SPI」而已,比如Python里的抽象基类(ABC)场景,用户继承ABC实现方法后传给框架。
2. Strategy Pattern(策略模式)
如果你的场景是:库提供核心逻辑,用户实现的子类是不同的「策略」(比如不同的数据源读取方式、不同的计算规则),库根据用户传入的策略实例执行对应逻辑,那这完全符合策略模式的定义。策略模式本质就是通过抽象接口封装可变行为,让用户可以替换不同的实现。
3. Callback Pattern(回调模式)
虽然回调常和单独的函数关联,但在面向对象场景下,「实现抽象类/接口并传递实例」其实是对象式回调的一种形式——库在执行过程中会回调你实现的方法。比如很多GUI框架里的事件监听器,就是用户实现监听器接口,传给组件,组件触发事件时调用监听器的方法,这和你说的场景一致。
背后的设计原则:Hollywood Principle(好莱坞原则)
不管叫什么模式,这种设计背后都是遵循「不要调用我们,我们会调用你」的好莱坞原则,也就是控制反转(IoC)的一种体现——把业务逻辑的控制权交给库,用户只需要实现约定好的接口即可。
另外补充一点:有些文档可能会笼统地称之为**「用户扩展点模式」**,但这不是一个正式的GoF设计模式名称,只是一种描述性的说法。
内容的提问来源于stack exchange,提问作者JoeZuntz
相关产品推荐
相关产品推荐

