服务提供者框架

2014-11-24 09:07:01 · 作者: · 浏览: 0

服务提供者框架的构成

服务接口——服务的提供者去实现这个接口

提供者注册API——系统用来注册实现,提供客户端访问

服务访问API——客户端用来获取服务的实例的


服务提供者接口


整体的流程大致就是,我们客户端需要某个服务,那么必然需要去实现这个服务,而这个服务又是由他的提供者去实现的!

为了客户获得同一个服务的不同实现我们通常通过一个服务管理者去获得这个服务,服务管理者就好比一个大管家,

你通常的情况是告诉管家我我准备要xxx提供的服务,然后管家在自己的账簿中找啊找,找有没有你说的这个名字的提供者

找到了提供者再由提供者将这个服务给管家,管家再给你!


一般的提供者都会把自己注册到管家那里

[java]
package com.baobaoyeye.test.psapi;

public interface Service {

public String read();

public void write(String arg);
}


[java]
package com.baobaoyeye.test.psapi;

public interface Provider {
public Service getService();
}

[java]
package com.baobaoyeye.test.psapi;

import java.util.concurrent.ConcurrentHashMap;

public class ServiceManager {

private ServiceManager(){}

private static final ConcurrentHashMap providers =
new ConcurrentHashMap();

public static void registerService(String name,Provider provider){
providers.put(name, provider);
}

public static Service getService(String name) {
Provider p = providers.get(name);
if(p!=null){
return p.getService();
}
return null;
}
}


[java]
package com.baobaoyeye.test.psapi.impl;


import com.baobaoyeye.test.psapi.Provider;
import com.baobaoyeye.test.psapi.Service;
import com.baobaoyeye.test.psapi.ServiceManager;

public class TestProvider implements Provider {

static{
ServiceManager.registerService("TestService", new TestProvider());
}

@Override
public Service getService() {
return new ServiceImpl();
}

class ServiceImpl implements Service{

private String tmp;

@Override
public String read() {
return this.tmp;
}

@Override
public void write(String arg) {
this.tmp = arg;
}
}
}

[java]
package com.baobaoyeye.test.psapi;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
try { www.2cto.com
Class.forName("com.baobaoyeye.test.psapi.impl.TestProvider");
Service s = ServiceManager.getService("TestService");
s.write("hahaha");
System.out.println(s.read());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}


作者:baobaoyeye