谈谈服务提供框架

参考: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同样采用了服务提供者框架,后续再深入研究。

posted on 2018-10-22 13:54  -赶鸭子上架-  阅读(222)  评论(1编辑  收藏  举报