欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 20:23:02
...

服务提供者框架

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

关系图

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

详解

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; //返回所建立的数据库连接