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