`
mazhongjia
  • 浏览: 25342 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

服务提供者框架

阅读更多

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的源代码就好了。

分享到:
评论

相关推荐

    Dubbo服务框架 v3.2.2

    服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 注册中心通过...

    Dubbo服务框架.rar

    服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者在启动时,向注册中心订阅自己所需的服务。 注册中心返回服务提供者地址列表给消费者,如果有变更,注册...

    阿里巴巴开源服务框架Dubbo.zip

    服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心 服务提供者无状态...

    分布式服务框架 dubbo/dubbox 入门示例

    分布式服务框架 dubbo/dubbox 入门示例 1.透明化的远程方法调用,就像调用...3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

    分布式服务框架Kepler.zip

     Kepler的上帝视角关于ZooKeeper关于MongoDB(可选) Kepler的角色分工Service/Client:服务提供者/服务调用者Registry:注册中心@See[Monitor]:数据收集服务, 收集服务运行时状态@See[Admin]:服务管理中心, 提供服务...

    firefly基于python的游戏服务器框架

    它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务,节省大量游戏开发的工作时间,真正做到让使用者把精力放在游戏玩法逻辑上。用它可以搭建自定义的分布式架构,只需要修改相应的配置文件即可。 优势特性...

    Dubbo服务框架-其他

    服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心 服务提供者无状态,可动态增加...

    框架:已弃用,请使用:https:github.comCatLibCatLib

    CatLib是一套渐进式的服务提供者框架,我们通过集成常见的开发组件来减少开发者们所需的工作,例如: 。 支持任意来源的。 抽象。 ,, 。 基于Web的 支持Tcp,Kcp的 CatLib提供了项目所必需的基础组件,您可以通过...

    dubbo分布式服务框架例子

    参考博客地址: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 微服务简单框架

    spring cloud 微服务简单框架含服务提供者、服务消费者、服务中间转发简单框架源码

    Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序.zip

    Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序 框架HTTP缓存 这个存储库包含一个瘦框架HTTP缓存中间件和服务提供者。安装通过编辑器$ composer require slim/http-cache需要 Slim 3.0.0或者更高版本。用法

    dubbo框架的代码

    dubbo是阿里巴巴推出的一个分布式服务框架,分为消费者和提供者

    分布式服务dubbo框架的实例演示

    1,基于Spring XML配置管理dubbo的提供者与消费者 2,清晰的maven项目结构 3,使用sl4j+logback日志输出 4,google guava使用 5,dubbo消费者实例 6,多线程压测dubbo服务 7,dubbo的性能参数验证,比如timeout,...

    Dubbo服务框架 v3.0.0

    服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心 服务提供者无状态,可动态增加...

    java三大框架

    框架说白了就是JAVA工作者多年以来总结出的一些开发标准。让我们可以以成功的经验模式来开发我们自已的系统,一般使用框架的好处是 ·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 ...

    ssm框架基于微信小程序的社区志愿者服务平台 .rar

    基于SSM框架(Spring + Spring MVC + MyBatis)的...通过以上功能的设计与实现,基于SSM框架的社区志愿者服务平台为社区居民提供了一个便捷、规范的志愿者服务平台,促进了社区内的志愿服务活动组织和社区建设的发展。

    Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架

    Dubbo集群提供了哪些负载均衡策略? Dubbo的集群容错方案有哪些? 配置 Dubbo 配置文件是如何加载到 Spring 中的? 说说核心的配置有哪些? Dubbo 超时设置有哪些方式? 服务调用超时会怎么样? 通信协议 Dubbo 使用...

    股权投资合作框架协议.doc

    2.乙方欲获得甲方投资,需新发起设立通过APP和网站搭建XXX的整合平台(以下简称“XXX项目”)为技术支持而提供人才服务业务为主要营业方式的有限责任公司(以下简称“目标公司”)为首要条件。 3.目标公司合法设立后...

Global site tag (gtag.js) - Google Analytics