6. 共享服务而是不实现开发 OSGi bundle 时,一个最佳实践是使用 OSGi 服务注册表来实现工厂模式,并用其他 bundle 构造导出类。除了 最佳实践之外,还实现了一个客户端、API 和 API 实现的松耦合。 原因如下
分离 API 和实现的实践从消耗资源的客户端抽象了多个实现。这使得一个供应商的 API 实现可以被另一个替换,且不需要变更使用 API 的客户端。
想要行之有效,对于 API 和实现的分离,客户端需要一个机制来获取一个实现实例,而无需知道将要使用哪个实现。在非 OSGi 系统中,这通常是由一个 API 类中的静态工厂方法来完成的。静态工厂方法从类路径上的实现中选择要实例化哪个实现。由于平面类空间的所有这些实现都是可视的。用于决定哪个类应该被实例化的算法是特定于 API 的。
这个机制在 OSGi 中不能正常工作,因为含有 API 类的 bundle 不能看到任何含有 API 实现的 bundle。
OSGi 以 OSGi 服务注册表的形式提供一个更为整洁的解决方案。Bundle 含有以下 API 实现之一:
在 OSGi 服务注册表中注册一个 API 接口实例。这可以产生这种效果,即所有客户端 bundle 仅使用一个实现实例。