参考:https://blog.csdn.net/zl3450341/article/details/7227197
组件 | 说明 |
---|---|
服务接口(Service Interface ) | 由系统制定的服务标准,需要提供者实现 |
提供者注册API(Provider Registration API) | 系统用来注册提供者的实现,让客户端访问 |
服务访问API(Service Access API) | 客户端用来获取服务的实例。 服务访问API一般允许但是不要求客户端指定某种选择提供者的条件,如果没有这样的规定,API就会返回默认实现的一个实例 服务访问API是“灵活的静态工厂”,它构成了SPF的基础 |
服务提供者接口(Service Provider Interface) | 由系统制定的提供者接口(可选),负责创建其服务实现的实例 |
Code: 以Salt举例
1. 定义Salt服务接口
//service interface public interface Salt { void addIodine(); }
包括各种方法。
2. Salt服务提供者注册api
可以理解为将实现Salt服务的第三方加入到候选列表中。这一步决定是否需要实现第3步。如果没有定义Salt服务提供者接口,则可以直接注册名称,之后在第4步中通过反射的方式获得服务。
public class SaltManager { private static final Map<String, SaltProvider> providers = new ConcurrentHashMap<String,SaltProvider>(); //provider registration api public static void registerSaltProvider(String name, SaltProvider provider){ providers.put(name, provider); } //service access api public static Salt getSalt(String name){ SaltProvider provider = providers.get(name); return provider.getSalt(); } }
3. (可选)定义Salt服务提供者接口
//service provider interface public interface SaltProvider { Salt getSalt(); }
4. Salt服务访问api
由第2步的代码可以看到Salt服务访问api - getSalt(),具体就是到Map中去找第三方的实现并获得服务。
//service access api public static Salt getSalt(String name){ SaltProvider provider = providers.get(name); return provider.getSalt(); }
对于服务标准制定者,
1. 制定服务标准
2. 实现类似于字典的服务管理器,以及注册api
对于服务实现厂商(第三方),
1. 实现服务标准
2. 自己注册到服务管理器
对最终用户,
1. 知道如何用即可
JDBC, JMS同样采用了服务提供者框架,后续再深入研究。