effective java Item01------服务提供者框架详解
来源:互联网 发布:网络综合布线设计方案 编辑:程序博客网 时间:2024/05/28 23:20
服务提供者框架:是只这样的一个框架,多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把他们从多个实例中解耦出来。
服务提供者框架的组成:
服务接口(Service Interface):提供者实现的接口,为服务实现者提供统一的抽象接口,换句话说是客户端调用的接口,由服务提供者实现。
提供者注册API(Provider Registeration API):服务提供者注册的API,用于注册服务提供者,客户端可以访问它实现的服务。
服务访问API(Service access API):访问API获取相应的服务。
服务提供者接口(Service Provider Interface ):服务提供者接口,这些服务提供者负责创建服务实现的实例。
具体实现一个实例:
1.服务接口
/** * 服务的接口 * 此接口提供一组标准供客户端调用,多个服务提供者实现这个接口 * */public interface DatabseService {public String getConnection();}2.服务接口实现(两个)
public class MySQLService implements DatabseService {@Overridepublic String getConnection() {return "获得MYSQL的连接";}}
public class OracleService implements DatabseService {@Overridepublic String getConnection() {return "获得Oracle连接";}}
3.服务提供者接口
/** * 服务提供者类 * function:负责实例化服务,并且注册到services中 */public class MySQLServiceProvider implements ServiceProvider {static {Services.RegisterProvider("MySQL", new MySQLServiceProvider());}@Overridepublic DatabseService getDatabseService() {return new MySQLService();}}
OracleProvider也必须的实现,根据需求去实现。如果扩展到其他数据库的连接(如DB等)
4.服务管理(此类中包含有服务提供者注册API和服务访问API)
import java.util.Map;import java.util.concurrent.ConcurrentHashMap;public class Services {private Services(){};private static final Map<String, ServiceProvider> providers =new ConcurrentHashMap<String, ServiceProvider>();public static final String DEFAULT_PROVIDER_NAME="MySQL";/*服务提供者注册方法*/public static void RegisterDeafultProvider(ServiceProvider p){providers.put(DEFAULT_PROVIDER_NAME, p);}public static void RegisterProvider(String name ,ServiceProvider p){providers.put(name, p);}/*服务访问API*/public static DatabseService newInstance(){return newInstance(DEFAULT_PROVIDER_NAME);}public static DatabseService newInstance(String name){ServiceProvider p = providers.get(name);if(p==null)throw new IllegalArgumentException("No Provider registered with name"+name);return p.getDatabseService();}}
5.测试类:
public class Test {public static void main(String[] args) {try {Class.forName("org.effectivejava.examples.chapter02.serviceFramework.MySQLServiceProvider");DatabseService ds = Services.newInstance("MySQL");Class.forName("org.effectivejava.examples.chapter02.serviceFramework.OracleProvider");try{DatabseService dsa = Services.newInstance("Oracle");System.out.println(dsa.getConnection());}catch(Exception e){e.printStackTrace();}System.out.println(ds.getConnection());} catch (ClassNotFoundException e) {e.printStackTrace();}}}
这就是模拟各种数据库连接驱动的实现过程。数据库的驱动就是一个服务提供者框架。
0 0
- effective java Item01------服务提供者框架详解
- Effective Java学习(1) 服务提供者框架
- 服务提供者框架(Effective Java学习笔记)
- java 服务提供者框架
- java之服务提供者框架
- JAVA 服务提供者框架介绍
- JAVA 服务提供者框架介绍
- JAVA 服务提供者框架介绍
- Java服务者提供者框架
- JAVA 服务提供者框架介绍
- 服务提供者框架
- 服务提供者框架
- 服务提供者框架
- 服务提供者框架示例
- 服务提供者框架模式
- 封装服务提供者框架
- 服务提供者框架
- JDBC理解-服务提供者框架
- Unity3D游戏开发之刀光剑影特效如何实现
- Python mysql 数据库操作
- Timer和TimerTask详解
- QT--QSocketNotifier类介绍
- Vim编译器的自动补全
- effective java Item01------服务提供者框架详解
- GraphSON Reader and Writer Library
- DevExpress GridControl使用方法总结
- QT--QSocketNotifier类介绍
- touch事件分发
- 设定CentOS的网络时碰到的一个小问题
- Android 微信分享操作后 在当前界面提示方案 解决
- magento 调取最新订单号
- Linux嵌入式交叉编译环境 的搭建