什么是服务提供者框架?服务提供者框架是指这一个系统:多个服务提供者来实现一个服务,系统为客户端的服务提供者提供多个实现,并且 把他们从多个实现中解耦出来。咋一看这个定义,一脸懵逼。那么我们就来看一下他们之间的关系图吧。
这里写图片描述
服务提供框架有4个组件,依次是服务接口,服务器提供者接口,提供者注册API,服务访问API。
为什么要讲到JDBC?其实我们可以仔细回想一下JDBC的基本步骤,是不是和我们上面的步骤类似。没错,JDBC也是用到了服务提供者框架。
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","cmazxiaoma");
/**
* 服务接口
* @author Administrator
*
*/
public interface UserService {
public void login();
public void register();
}
package 服务提供者框架;
/**
* 服务具体实现类
* @author Administrator
*
*/
public class UserServiceImpl implements UserService{
@Override
public void login() {
// TODO Auto-generated method stub
System.out.println("cmazxiaoma登录成功");
}
@Override
public void register() {
// TODO Auto-generated method stub
System.out.println("cmazxiaoma注册成功");
}
}
package 服务提供者框架;
/**
* 服务提供者接口
* @author Administrator
*
*/
public interface UserProvider {
public UserService getUserService();
}
package 服务提供者框架;
/**
* 服务提供者具体实现类
* @author Administrator
*
*/
public class UserProviderImpl implements UserProvider{
@Override
public UserService getUserService() {
// TODO Auto-generated method stub
return new UserServiceImpl();
}
static{
ServiceManager.registerProvider("登录注册",new UserProviderImpl());
}
}
package 服务提供者框架;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 服务提供者注册类
* @author Administrator
*
*/
public class ServiceManager {
private ServiceManager(){
}
private 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 registered with name="+name);
}
return provider.getUserService();
}
}
package 服务提供者框架;
/**
* 测试类
* @author Administrator
*
*/
public class test {
public static void main(String[] args){
try {
Class.forName("服务提供者框架.UserProviderImpl");
UserService userService=ServiceManager.getService("登录注册");
userService.register();
userService.login();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这里写图片描述
整个步骤下来,其实服务提供者框架还是很轻松的。理解了思想,怎么实现都行。