服务提供者框架(Service provider Framework)
程序员文章站
2022-06-13 20:23:02
...
服务提供者框架
是指这样一个系统,多个
服务提供者
实现一个服务
,系统为服务提供者的客户端提供多个实现,并把它它们从多个实现中解耦出来.
关系图
详解
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; //返回所建立的数据库连接
推荐阅读
-
详解Angular中的自定义服务Service、Provider以及Factory
-
谷歌服务框架可以删除吗 google services framework删除后有什么影响
-
golang微服务框架go-micro 入门笔记2.4 go-micro service解读
-
laravel5.5源码笔记(二、服务提供者provider)
-
SpringCloud框架服务提供者
-
Android Binder框架(Framework层获取Binder服务过程源码分析)
-
服务提供者框架(Service provider Framework)
-
封装服务提供者框架
-
服务提供者框架
-
Effective Java学习(1) 服务提供者框架