随笔 - 204  文章 - 0  评论 - 15  阅读 - 32万

谈谈服务提供框架

参考: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   -赶鸭子上架-  阅读(224)  评论(1编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示