`
mazhongjia
  • 浏览: 26287 次
  • 性别: 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 服务提供者

    1. Dubbo服务提供者是Dubbo框架中发布服务的组件,负责处理远程调用。 2. 部署Dubbo服务提供者前,必须先运行Zookeeper,因为它在服务注册和发现过程中起到关键作用。 3. Zookeeper的使用需要在服务提供者的配置中...

    Net SAML2 Service Provider Framework

    《Net SAML2 Service Provider Framework》是一份详尽的文档,旨在介绍和解释.NET环境下的SAML2服务提供者框架的各个方面。该框架是为实现安全、标准化的身份验证与授权机制而设计的,特别适用于跨组织或跨域的用户...

    dubbo服务提供者的web应用实例

    【标题】"Dubbo服务提供者的Web应用实例"是一个典型的分布式服务架构中的示例,它展示了如何将一个Java Web应用程序转化为服务提供者,利用Apache Dubbo框架对外提供服务。Dubbo是一个高性能、轻量级的开源Java RPC...

    京东服务框架实践.pptx

    Proxy Client负责服务调用,Server Transport负责服务提供者和服务消费者之间的通信。Invoker Interface是服务提供者的接口。 技术选型 JSF采用了多种技术来实现高性能和可扩展性,包括NIO、TCP长连接、IO-...

    修改后的dubbo服务提供者实例

    标题中的“修改后的dubbo服务提供者实例”指的是一个经过定制或优化的Dubbo服务提供者项目,这个项目被设计成一个普通的Java工程,能够方便地通过Maven打包并集成到消费者工程中。Dubbo是一个高性能、轻量级的开源...

    Dubbo阿里巴巴分布式服务框架

    1. 服务提供者(Provider):提供服务的实体,通过Dubbo可以将服务暴露出来,使得其他服务能够调用。 2. 服务消费者(Consumer):消费服务的实体,通过Dubbo调用服务提供者提供的服务。 3. 服务注册中心...

    Dubbo分布式服务框架入门2

    1. **创建服务提供者**: 创建一个实现了特定接口的Java服务类,这是服务的核心业务逻辑。 2. **配置服务元数据**: 在Spring配置文件中,定义服务提供者的bean,包括接口名、实现类、版本号等信息。 3. **启动服务...

    Dubbo服务框架 v3.2.2

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

    Dubbo服务框架.rar

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

    操作者框架的实际应用

    文件列表中的“Actor Framework 实际应用.pdf”很可能是对操作者框架的理论介绍和实践指导,包含了如何在具体项目中引入和使用操作者框架的步骤。而“附件”可能包含了与PDF文档相关的源代码或补充材料。“[Project ...

    分布式服务框架原理与实践 PDF

    这涉及到服务注册与发现,使得服务提供者能够向注册中心注册自己的服务,而服务消费者可以通过查找注册中心获取到服务提供者的地址。此外,负载均衡策略也是必不可少的,例如轮询、随机、最少连接数等,这些策略可以...

    轻量级RPC框架

    在RPC框架中,服务提供者通过监听特定端口的Socket,等待服务消费者的请求。服务消费者通过Socket连接到服务提供者的地址和端口,发送请求,并接收响应。 Java动态代理是Java语言提供的一种机制,允许在运行时创建...

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

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

    Dubbo+Zookeeper+SpringMVC整合实现分布式服务治理框架(附件含源码)

    Dubbo提供了服务提供者(Provider)和服务消费者(Consumer)的概念,允许应用之间通过网络进行直接通信。它支持多种协议,如HTTP、RMI、Hessian等,并且可以自定义协议。Dubbo还包含了服务的注册与发现机制,使得...

    京东服务框架实践.pdf

    此外,JSF支持HA(高可用性)和负载均衡,确保服务消费者通过算法选择多个服务提供者实例时,可进行健康监测和重试机制配置。 为了提升性能,JSF框架采取了包括批量处理请求、优化线程模型、启用压缩算法、定制序列...

    GroupCo基础服务提供者,java版本.可以与GroupCo服务层无缝切换

    在IT行业中,尤其是在分布式系统和微服务架构领域,服务提供者和服务消费者之间的高效通信是至关重要的。"GroupCo基础服务提供者,java版本"显然是一款专门为GroupCo设计的基础服务组件,它采用Java语言进行开发,...

    远程调用服务框架

    通过Spring的IOC(Inversion of Control)容器,服务提供者可以在启动时自动注册服务,而服务消费者可以通过服务ID和服务接口从ServiceRepository中获取服务代理,从而实现远程调用。 总结来说,远程调用服务框架是...

    C++开发web服务框架之HTTP Web框架的设计与实现

    5. **错误处理**:确保框架能够优雅地处理异常和错误,提供有意义的错误信息,并保持服务的稳定性。 6. **模板引擎**:对于动态生成HTML,我们需要一个模板引擎,如Boost.Spirit或外部库如Handlebars,以便将数据和...

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

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

    服务框架 Dubbo.7z

    Dubbo 的核心设计理念是“面向接口的编程”,使得服务提供者和消费者之间通过接口进行解耦,提高了系统的灵活性和可扩展性。 1. **服务提供者(Provider)**:服务提供者是实际提供服务的应用,它将服务注册到注册...

Global site tag (gtag.js) - Google Analytics