`
liangfeng366
  • 浏览: 77933 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

[item1]服务提供者接口

阅读更多
    静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不必存在。这种灵活的静态工厂方法构成了服务提供者框架(Service Provider Framework)的基础,例如JDBC API。
     服务提供者框架中有三个重要的组件:服务接口(Sevice Interface),这是提供者实现的;提供者注册API(provider Registration API),这是系统用来注册实现的;服务访问API,是客户端用来获取服务的实例。
JDBC源代码学习之服务提供者框架
http://edwinljg.iteye.com/blog/565742
package chapter2;

/*
 * 服务接口。<BR> 
 */
public interface Service {
	public String read();
	public void write(String content);
}

package chapter2;

/*
 * 服务提供者接口。<BR>  
 */
public interface Provider {
	public Service getService();   
}





package chapter2;

/*
 * 服务提供者实现。<BR>  
 */
public class AdobeProvider implements Provider {
	
	static {
		ServiceManager.registerProvider("Adobe", new AdobeProvider());
		System.out.println("12313");
	}
	
	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...");
		}
		
	}
	
}

package chapter2;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 服务管理类。<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();
		
	}
	
}


package chapter2;

/**
 * 测试用类。<BR>
 */
public class Test {
	
	public static void main(String []args) throws Exception {
		//註冊服务
		Class.forName("chapter2.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来说,Connction就是它的服务访问接口,DriverManagers是提供者注册ApI,DriverManager.getConnetion是服务访问API.Driver就是服务提供者接口。
分享到:
评论

相关推荐

    android内容提供者

    内容提供者是一个接口,它定义了标准的机制,让应用程序能够存储和检索来自其他应用的数据。通过内容提供者,开发者可以将自己的数据结构化,并以统一的方式暴露给其他应用。内容提供者基于URI(Uniform Resource ...

    SAP ABAP 调用外部接口webservice案例分享

    设置一个前缀和开发类,系统会自动生成一个与WSDL定义相符的服务消费者,如ItemTransmitServiceWS,以及对应的类ZWSDL_CO_ITEM_TRANSMIT_SERVICE。 完成消费者代理的创建后,需要将其发布并激活。修改releasestatus...

    金蝶消息接口集成

    金蝶的消息接口主要涉及到`MessageWebServiceDao`接口,该接口提供了四个关键方法,用于添加、删除、更新消息状态以及批量更新消息状态。 1. `addMessage(WSMessage message)`:此方法用于在第三方系统中添加一条...

    支付宝信用卡分期支付接口(create_direct_pay_by_user)

    【支付宝信用卡分期支付接口(create_direct_pay_by_user)】是支付宝提供的一个高级支付功能,允许用户在购买商品或服务时选择使用信用卡进行分期付款。这个接口主要用于电商、在线零售和其他需要支持消费者分期付款...

    淘宝开发接口的商品上下架功能

    这是一个为第三方开发者提供服务的平台,允许开发者通过API接口访问淘宝的数据和服务,包括商品管理、订单处理、用户信息查询等功能。在开发过程中,开发者需要注册并获取到API密钥,以便进行身份验证和权限控制。 ...

    ruby和redis接口.zip

    redis.lpush('mylist', 'item1') redis.rpush('mylist', 'item2') items = redis.lrange('mylist', 0, -1) ``` 此外,Redis还支持事务(Transactions)、发布/订阅(Pub/Sub)以及复杂的脚本执行(LUA Scripting)...

    接口文档1

    在IT行业中,接口文档是系统开发中的重要组成部分,它详细定义了不同系统或服务之间的交互方式,包括数据...在实际应用中,开发者通常会利用这些接口的数据来优化服务,提升用户体验,同时辅助决策者进行科学的决策。

    基于RecyclerView实现的仿微信聊天界面,item长按根据触摸位置弹出对话框

    这些功能需要与后台服务进行交互,例如调用复制文本的系统API,或者通过接口发送消息请求。在处理这些功能时,要注意处理可能出现的异常情况,并提供友好的用户反馈。 总的来说,这个项目涵盖了Android开发中的多个...

    RESTful 接口定义标准

    - **格式**:`/{resource}/{:id}/{item}` - **GET**:返回新的子资源(使用默认值生成)。 - **POST**:创建新的子资源。 #### 四、返回值格式详解 为了保证API的响应数据具有良好的一致性和可读性,定义了一套...

    支付宝快捷支付网关接口(create_direct_pay_by_user)

    这个接口主要用于电商平台、在线服务提供商等需要集成支付宝支付的企业或开发者,使得消费者能够直接在商家网站或者应用上完成对商家的支付。 ### 功能描述 `create_direct_pay_by_user`接口的主要功能是为商家和...

    使用Apache Commons Discovery查找可插拔接口实现类(Pluggable interfaces)

    2. **`ServiceFinder` 接口**:提供了查找服务的方法,如 `findServices(Class)` 和 `findProviders(Class)`,它们分别用于查找实现了指定接口的所有服务和提供者。 3. **`ClassDiscovery` 类**:这个类专门用于...

    Inside MAPI

    这些服务提供者通过一系列标准接口来实现,这使得开发人员可以轻松地与不同的邮件系统集成。 ### 使用MAPI的步骤 1. **初始化MAPI会话**:这是与MAPI交互的第一步,需要创建一个MAPI会话对象。 2. **选择服务提供...

    OPC应用程序入门[借鉴].pdf

    总的来说,OPC技术为工业自动化提供了标准化的接口,简化了不同设备和系统的集成工作。虽然初学者可能会遇到一些概念和技术的挑战,但通过学习和实践,可以逐渐掌握OPC应用程序的开发。OPC的应用不仅限于VB,也可以...

    Android 获取运用服务

    - 绑定服务(Bound Service):由bindService()启动,允许其他组件与其交互,提供接口,服务会在所有绑定者解除绑定后自动停止。 二、获取正在运行服务的方法 1. 使用ActivityManager类:Android SDK提供了...

    spring-cloud.docx

    1. **服务定义**: 创建 Pojo 类,如 User、Item、Order 等,定义服务接口,如 UserService、ItemService 等。 2. **服务实现**: 创建 Spring Boot 项目,添加对应服务的实现类,如 UserServiceImpl、ItemServiceImpl...

    用OPC接口实现专家系统与WinCC互联.pdf

    MFC提供了一个通用的类厂COleObjectFactory,它继承自CCmdTarget类,并实现了IClassFactory2接口。有了类厂对象后,就可以使用其CreateInstance成员函数创建COM对象了。 OPCServer应用程序主要包含三个部分:Server...

    安卓listview相关相关-listview的item仿微信右滑删除.zip

    1. **SwipeRefreshLayout**:这是一个Android官方提供的组件,用于实现下拉刷新的功能。虽然名字中并未包含“右滑删除”,但它可以帮助我们处理手指滑动的事件,是实现右滑操作的一个基础。 2. **RecyclerView**:...

    最简单的访问OPC服务器方法.doc

    OPC (OLE for Process Control) 是一种工业自动化领域中用于数据交换的标准接口,它允许不同厂商的硬件和软件系统之间进行通信。...这篇文章为初学者提供了一个简化的指南,帮助他们快速入门OPC服务器的访问。

Global site tag (gtag.js) - Google Analytics