服务提供者框架模式

服务提供者框架模式

service provider frameworks - 服务提供者框架: 多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把他们从多个实现中解耦出来。 
从字面上理解,就是提供服务的一个框架,它不对外暴露是怎么实现服务的,我需要什么服务就使用什么服务,当然我使用的这个服务类必须是已经在这个服务框架存在的,提供者为框架的用户提供了多个API实现,所以这个服务提供者框架必须提供一种机制来注册这些实现类,以便我们能够使用它们,我们只需要使用框架来调用自己想用的服务就可以了,无需关心自己到底在使用哪个实现以及服务是怎么实现的。 
SPF 包括以下组件:

组件 说明
服务接口(Service Interface ) 这是提供者实现的
提供者注册API(Provider Registration API) 这是系统用来注册实现,让客户端访问
服务访问API(Service Access API) 是客户端用来获取服务的实例的
服务访问API一般允许但是不要求客户端指定某种选择提供者的条件,如果没有这样的规定,API就会返回默认实现的一个实例
服务访问API是“灵活的静态工厂”,它构成了SPF的基础
服务提供者接口(Service Provider Interface) 负责创建其服务实现的实例

示例: SPFTest

通过上面的例子可以看出,我们只需要输入一个key就可以得到对应的类的实例,进而使用该类的方法,这种方法能大大降低代码的耦合度,这里的Map集合可以理解为服务提供者框架的注册机制,Map中的Key和Value的值都应该在配置的属性文件(properties)中,这样方便我们查看和添加服务类,我们只需要操作这个配置文件就可以了,这样我们的实际模式实现了java的解耦合问题。

服务接口的具体实现类和服务提供者接口的实现类都是服务提供者自己去实现。以JDBC为例,这2个模块由具体的数据库提供商来实现。

示例:JDBC(Java数据库连接,Java Database Connectivity) 
加载驱动程序:

Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")

获得数据库连接:

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/fireway", "root", "root")

创建Statement\PreparedStatement对象:

conn.createStatement();
conn.prepareStatement(sql);

下面我们看看上面的语句分别做了什么事情:

  1. Connection就是JDBC的服务接口;
  2. Class.forName("...")会实例化一个com.mysql.jdbc.Driver类(服务提供者接口的实现类),并将这个类的实例注册到DriverManager.registerDriver(提供者注册API);
  3. 通过建立连接的URL,用户名,密码来获取链接到mysql数据库的Connection服务。DriverManager.getConnection()是服务访问API, 返回的是具体的实现类对象。
  4. Driver就是服务提供者接口。

参考资料:

时间: 2024-10-25 23:53:19

服务提供者框架模式的相关文章

Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27

Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27 1. 修改历史2 2. 适用语言::几乎所有编程语言.语言提升的三个渠道::语法,类库,框架,ide2 2.1. 单根继承 vs  多跟继承3 2.2. 默认参数3 2.3. 等号判断相等,儿不是equ3 2.4. 隐式类型,类型推导3 2.5. 匿名类型3 2.6. 初始化器  对象初始化器 与 集合初始化器 { }4 2.7. 委托4 2.8. 内置委托 Func / Action 4 2.9. 标准查询运算符 St

框架模式 MVC 在Android中的使用

算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学),二来网络上的很多框架已经帮我们做了太多的事情了,我们只需要画画UI就可以了,感觉Android开发没有太多的技术含金量.最近闲来无事,开始总结之前学过的知识点,想着是否应该学点其他的东西呢?总不能局限于Android基础知识吧.慢慢的探索发现在大的项目工程中,一个好的框架,好的设计模式,能减少很大的

小试Android中使用MVC框架模式

MVC简介 关于MVC网上的说法成千上万,每个人都有自己的理解,下面只是我个人现阶段学习的理解,欢迎指出不足之处~ MVC(Model View Controller 模型-视图-控制器) Model(模型)直接操作数据层(如数据库记录的读写等),通常有最重的处理任务 View(视图) 直接面向用户数据展示界面,接受用户的数据输入并传递给控制层 Controller(控制器)业务逻辑处理层,本身不输出任何东西和做任何处理.它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示

MVC框架模式

backbone:http://www.cnblogs.com/darr/p/4625733.html 什么是MVC模式 模式:一种解决问题的方法 设计模式  :工厂模式.适配器模式.观察者模式等 框架模式  :MVC.MVP.MVVM等(框架模式里有很多设计模式) MVC: M-Model V-View C-Controller(连接M和V) 2. MVC模式的思想 把M和V分开 服务器端MVC模式非常容易实现 MVC代码例子:

MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)

前言: 刚刚学完了MVC,根据自己的感悟和理解写了一个小项目. 完全按照MVC模式,后面有一个MVC的理解示意图. 用MVC模式重新完成了联系人的管理系统: 用户需求: 多用户系统,提供用户注册.登录功能,对于没有登录的用户,不允许使用任何功能. 可以查询.增加和删除联系人信息. 详细设计: 数据结构设计. 功能模块设计. 工具类设计. 搭建初步的项目框架.其他功能:防止用户重复提交.注册和登录时使用验证码. 项目代码在后面. 演示效果: 主页: 注册页面: MVC介绍: MVC全名是Model

模式二之框架模式

摘要: 在讲完javascript设计模式之后,本文主要再讲前端开发框架的模式,再讲模式之前,首先介绍下库和框架的区别,两者都是产品开发时的产物,因此很多人并没有很细的区分开来. 库是将代码封装在文件中.允许继承和修改这些文件.面向对象的代码组织形式而成的库也叫类库.面向过程的代码组织形式而成的库也叫函数库.在函数库中的可直接使用的函数叫库函数.开发者在使用库的时候,只需要使用库的一部分类或函数,然后继续实现自己的功能.比如造汽车,轮子.发动机都是一个库,我们需要继承它来组装汽车. 框架则是为解

简述MVC框架模式以及在你(Android)项目中得应用

标题是阿里电话面试的问题,一直以为自己很清楚MVC模式,结果被问到时,这M.V.C这几者之间的关系都搞不清楚了,最主要是,没法将MVC和Android中各个组件对应起来,所以,面试肯定挂了,不过面试也是学习的一种方式,可以知道大公司看中什么,以及自己还有哪些知识漏洞,例如这次面试就学到了很多东西. 大家也可以在看下面的内容之前,也想想能否把MVC及与Android各个组件的对应关系讲清楚,看是否还有和我一样对MVC一知半解的.  如果写的有问题的地方,欢迎讨论.转载请注明出处:http://ww

《Effective Java》服务提供者框架

静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不必存在.这种灵活的静态工厂方法构成了服务提供者框架(Service Provider Framework)的基础,例如JDBC API.服务提供者框架是指这样一个系统:多个服务提供者实现一个服务(接口),系统为服务提供者的客户端提供多个实现,并把他们从多个实现中解耦出来. 服务提供者框架中有四个重要的组件: 服务接口(Service Interface),这是提供者实现的.如JDBC的Connection 提供者注册API(Pr

简单的JAVA MVC框架模式--Java-servlet-JavaBean

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 此框架模式是一个简单的解决个人所得税计算的业务逻辑 servlet import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import ja