服务提供者框架(Service provider Framework)

服务提供者框架是一种系统设计模式,允许多个服务实现解耦。它包括服务接口、服务提供者接口、提供者注册API和服务访问API四个关键部分。在简单实例中,展示了如何定义服务接口、实现类以及注册和访问服务的过程。此外,博客还通过分析JDBC连接数据库,进一步说明服务提供者框架的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务提供者框架

是指这样一个系统,多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把它它们从多个实现中解耦出来.

关系图

服务提供者框架

详解

1. 服务接口(Service Interface)

在服务接口里面定义一些提供具体服务的方法,假设我们需要实现登陆注册的服务UserService,这个服务接口中一定有login(),register()方法,我们之后再创建这个服务接口的具体的实现类去实现login(),register()方法.

2. 服务提供者接口(Service Provider Interface)

服务提供者接口顾名思义就是定义提供什么样的服务的方法.我们在上面提供了一个服务接口,在这里就要提供一个能获取'注册登陆'服务的方法.
例如 : getUserService() 返回值 为UserService
然后去创建实现服务提供者接口的具体实现类实现getUserService()方法.

3. 提供者注册API(Provider Registration API)

服务提供者接口的具体实现类里面去注册这个API,在类的静态初始块中去注册API,因为只有注册了API,才能享受服务.这些注册过的API交给ServiceManager管理.

4. 服务访问API(Service Acess API)

既然已经注册了API,那我们就可以向ServiceManager申请具体的服务,调用服务实例的方法.
服务访问API是灵活的静态工厂,它构成了服务提供者框架的基础.

简单实例

服务接口 :

public interface UserService {
    public void login();
    public  void register();
}

服务实现类:

public class UserServiceImpl implements UserService {

    public void login() {
        System.out.println("登陆成功!");
    }
    public void register() {
        System.out.println("注册成功");
    }
}

服务提供者接口:

public interface UserProvider {
    public UserService getUserService();
}

提供者注册APi:

public class UserProviderImpl implements UserProvider {
    public UserService getUserService() {
        return new UserServiceImpl();
    }
    static {
        ServerManager.registerProvider("注册登陆", new UserProviderImpl());
    }
}

服务访问API[灵活的静态工厂]:

public class ServerManager {
    private  ServerManager(){}
    public static final Map<String,UserProvider> providers= new ConcurrentHashMap<String, UserProvider> ();
      public  static  void registerProvider(String name ,UserProvider provider){
          providers.put(name,provider);
      }
      public static  UserService getService(String name ){
          UserProvider provider = providers.get(name);
          if(provider == null ){
              // 表示没有此命名注册服务提供者
              throw  new IllegalArgumentException("no provider regietered with name = "+name);
          }
          //返回服务
        return provider.getUserService();
      }

}

JDBC连接数据库分析

Connection con = null;  //创建用于连接数据库的Connection对象    
    try {    
        Class.forName("com.mysql.jdbc.Driver");//  将驱动在DriverManager中进行注册      
        //    private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
        con = DriverManager.getConnection(    
                "jdbc:mysql://localhost:3306/myuser", "root", "root");//根据服务名返回其对应的服务[mysql Oracle 或者其他的服务]                
    } catch (Exception e) {    
        System.out.println("数据库连接失败" + e.getMessage());    
    }    
    return con; //返回所建立的数据库连接    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值