1.引入:静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以并不存在,这种灵活的静态工厂方法构成了服务提供者框架的基础。——引自effectivejava item one
2.说明:服务提供者框架是指这样的一个系统:提供者为框架的用户提供了多个API实现,框架必须提供一种机制来注册这些实现以便用户能够使用它们。框架的客户直接使用API,无需关心自己到底在使用哪个实现。
3.简单的服务提供者框架的例子:
import java.util.HashMap;
import java.util.Map;
class DefaultFoo extends Foo {
}
public abstract class Foo {
//注册实现类的集合
private static Map<String, Class> implementations;
static {
//初始化实现类集合
initMapIfNecessary();
}
private static void initMapIfNecessary(){
if(implementations == null){
implementations = new HashMap<String, Class>();
//以下从配置文件加载实现类映射以初始化注册实现类的集合 省略之。。
}
}
//获取对象实例
public static Foo getInstance(String key){
Class c = implementations.get(key);
if(c == null)
return new DefaultFoo();
try {
return (Foo) c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
说明:通过编辑一个配置文件,加入一个条目,把一个字符串映到对应的类名,以此来注册一个实现类,客户使用静态工厂方法时候把字符串键作为参数传递进去。静态工厂方法在一个映射表中查找Class对象,该映射表根据配置文件进行初始化,然后静态工厂方法使用Class.newInstaqnce()方法实例化这个类。
4.JDBC服务提供者框架
====================以下内容引用了edwinljg的文章中内容====================
最近项目要用到JDBC,就深入的学习了一下,所谓深入也只不过就是看了看他的源代码而已。现在想说说自己的感受。
在java.sql.*包中,大部分都是接口,也就所谓的SQL规范。这些接口,都是提供给数据驱动商来进行实现的,这样的好处就是也要知道这些接口的用法,就可以操作不同的数据库了,就也就是规范的作用。里面还有一个类:DriverManager,作为驱动的管理类。通过学习它代码,也就又引出了一个概念那就是服务提供者框架。下面看实例:
/**
* 服务接口。<BR>
*/
public interface Service {
public String read();
public void write(String content);
}
/**
* 服务提供者接口。<BR>
*/
public interface Provider {
public Service getService();
}
/**
* 服务管理类。<BR>
*/
public class ServiceManager {
private ServiceManager() {
}
private static final Map<String, Provider> providers =
new ConcurrentHashMap<String, Provider>();
public static void registerProvider(String name, Provider p) {
providers.put(name, p);
}
public static Service getService(String name) {
Provider p = providers.get(name);
if(p == null) {
throw new IllegalArgumentException("No provider registered with name:" + name);
}
return p.getService();
}
}
/**
* 服务提供者实现。<BR>
*/
public class AdobeProvider implements Provider {
static {
ServiceManager.registerProvider("Adobe", new AdobeProvider());
}
public Service getService() {
return new ServiceImpl();
}
class ServiceImpl implements Service {
public String read(){
System.out.println("Adobe read...");
return "";
}
public void write(String content) {
System.out.println("Adobe write...");
}
}
}
/**
* 测试用类。<BR>
*/
public class Test {
public static void main(String []args) throws Exception {
Class.forName("AdobeProvider");
//Class.forName("MicrosoftProvider");
//Class.forName("MacProvider");
Service service = ServiceManager.getService("Adobe");
//Service service = ServiceManager.getService("Microsoft");
//Service service = ServiceManager.getService("Mac");
service.read();
service.write("title");
}
}
看看测试类里面的调用,是不是和使用JDBC时有点像哈。通过注册不同的实现,来改变使用具体服务时候的底层操作,也就是说隐藏了具体实现。而作为服务使用者呢,这要知道提供的这些服务就好了。上面只是一个简单的实现,想更加深入的话,多多研究java的源代码就好了。
分享到:
相关推荐
服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 注册中心通过...
服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者在启动时,向注册中心订阅自己所需的服务。 注册中心返回服务提供者地址列表给消费者,如果有变更,注册...
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心 服务提供者无状态...
分布式服务框架 dubbo/dubbox 入门示例 1.透明化的远程方法调用,就像调用...3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Kepler的上帝视角关于ZooKeeper关于MongoDB(可选) Kepler的角色分工Service/Client:服务提供者/服务调用者Registry:注册中心@See[Monitor]:数据收集服务, 收集服务运行时状态@See[Admin]:服务管理中心, 提供服务...
它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务,节省大量游戏开发的工作时间,真正做到让使用者把精力放在游戏玩法逻辑上。用它可以搭建自定义的分布式架构,只需要修改相应的配置文件即可。 优势特性...
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心 服务提供者无状态,可动态增加...
CatLib是一套渐进式的服务提供者框架,我们通过集成常见的开发组件来减少开发者们所需的工作,例如: 。 支持任意来源的。 抽象。 ,, 。 基于Web的 支持Tcp,Kcp的 CatLib提供了项目所必需的基础组件,您可以通过...
参考博客地址:http://blog.csdn.net/u013142781/article/details/50387583 文件包含: 1.服务提供者 2.服务消费者 3.dubbo-admin-2.5.7.war 4.zookeeper-3.4.9.tar.gz
spring cloud 微服务简单框架含服务提供者、服务消费者、服务中间转发简单框架源码
Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序 框架HTTP缓存 这个存储库包含一个瘦框架HTTP缓存中间件和服务提供者。安装通过编辑器$ composer require slim/http-cache需要 Slim 3.0.0或者更高版本。用法
dubbo是阿里巴巴推出的一个分布式服务框架,分为消费者和提供者
1,基于Spring XML配置管理dubbo的提供者与消费者 2,清晰的maven项目结构 3,使用sl4j+logback日志输出 4,google guava使用 5,dubbo消费者实例 6,多线程压测dubbo服务 7,dubbo的性能参数验证,比如timeout,...
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心 服务提供者无状态,可动态增加...
框架说白了就是JAVA工作者多年以来总结出的一些开发标准。让我们可以以成功的经验模式来开发我们自已的系统,一般使用框架的好处是 ·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 ...
基于SSM框架(Spring + Spring MVC + MyBatis)的...通过以上功能的设计与实现,基于SSM框架的社区志愿者服务平台为社区居民提供了一个便捷、规范的志愿者服务平台,促进了社区内的志愿服务活动组织和社区建设的发展。
Dubbo集群提供了哪些负载均衡策略? Dubbo的集群容错方案有哪些? 配置 Dubbo 配置文件是如何加载到 Spring 中的? 说说核心的配置有哪些? Dubbo 超时设置有哪些方式? 服务调用超时会怎么样? 通信协议 Dubbo 使用...
2.乙方欲获得甲方投资,需新发起设立通过APP和网站搭建XXX的整合平台(以下简称“XXX项目”)为技术支持而提供人才服务业务为主要营业方式的有限责任公司(以下简称“目标公司”)为首要条件。 3.目标公司合法设立后...