Java 静态工厂模式的使用
多相关文章请参考:http://www.enjoytoday.cn/categorys/java
静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长,一个是返回值抽象,抽象一直都是java乃至编程中很受欢迎的词汇。但这种实现并不是万能的,也不可盲目使用,需要结合现实场景。就静态方式实现的场景总结如下:
- 访问频率较高
较高频率的访问通过该种方式实现可以有效减小每次重新创建对象的成本 - 结构化接口工具类实现
对于功能相似,代码复用较高的工具类操作通过基于接口的框架的实现方式可以简化大量代码实现,并可以直观的通过静态调用方法名称实现对象的获取,该类为操作性居多 - 单例模式的不二之选
单例实现的原由其实也是和其类似. 服务提供者框架实现
首先需要了解服务提供者框架做一个简单了解,服务提供者框架包括四个组成部分:
1)服务接口:服务提供者实现部分
2)提供者注册API:客户端用于注册服务系统实现的
3)服务访问API:客户端用于获取服务实例的
4)服务提供者接口(可选):提供者负责创建服务实现实例
经典案例jdbc的实现:try{
Class.forName("com.mysql.jdbc.Driver");//指定连接类型
Connection conn = DriverManager.getConnection(url, user, password);//获取连接
} catch (Exception e) {
e.printStackTrace();
}
如上所示:Connection为服务接口,提供sql连接服务; Class.forName(“com.mysql.jdbc.Driver”)就是提供者注册API;DriverManager.getConnection就是服务访问API;”com.mysql.jdbc.Driver”这个类就是服务提供者接口.
如下给出一个简单的静态工厂的代码:
public interface Service{
void startService();
}
public interface Provider{
Service getService();
}
public class ServiceImp implement Service{
public void startService{
System.out.println("get serviceImpl start Service.");
}
}
public class ProviderImpl implement Provider{
static{
ServiceManager.register("test",new ProviderImpl());
}
public Service getService(){
return new serviceImpl();
}
}
public final class ServiceManager{
private Map<String,Provider> maps= new ConcurrentHashMap<>();
public static void register(String name,Provider provider){
if(name!=null && provider!=null && !maps.containKey(provider)){
maps.put(name,provider);
}else{
throw new IllegeException("invaild synax.");
}
}
public static Service getService(String key){
Provider provider=maps.get(key);
if(provider!=null){
return provider.getService();
}else{
throw new IllegeException("register provider first,please.");
}
}
}
//使用
public class TestMain{
public static void main(String[] args){
Class.forName("xx.xxx.ProviderImpl");
Service service=ServiceManager.getService();
service.startService();
}
}
Java 静态工厂模式的使用的更多相关文章
- 从基础知识到重写Spring的Bean工厂中学习java的工厂模式
1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式: 单例模式是指控制其他对象获 ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- Yii2设计模式——静态工厂模式
应用举例 yii\db\ActiveRecord //获取 Connection 实例 public static function getDb() { return Yii::$app->ge ...
- Yii2 设计模式——静态工厂模式
应用举例 yii\db\ActiveRecord //获取 Connection 实例 public static function getDb() { return Yii::$app->ge ...
- 1.Java设计模式-工厂模式
1.简单工厂模式(Factory Method) 常用的工厂模式是静态工厂模式,利用static修饰方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化. //1.定义一 ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- Java学习笔记(十四)——Java静态工厂
[前面的话] 每天过的还行,对我来说,只要让自己充实,生活就会是好的. 学习Java工场方法的原因是最近在使用Spring框架做一个系统,其中有一个注入的方法是使用静态工场方法注入,所以学习一下,基础 ...
- 设计模式(二)——Java简单工厂模式
简单工厂模式 案例: 披萨的项目(要便于披萨种类的扩展,要便于维护) 1)披萨的种类很多(比如 GreekPizz.CheesePizz 等) 2)披萨的制作有 prepare,bake, cut, ...
随机推荐
- (转)阿里 RocketMQ 安装与简介
原文:阿里 RocketMQ 安装与简介 一.简介 官方简介: l RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l ...
- console的各种输出格式
console.log('%c',CSS样式)输出css样式 console.log('%s',字符串) 字符串格式化 %d%i 整数格式化: console.log('%o',节点) 可扩展的dom ...
- JS基础语法----Math对象
推荐查看MDN----在线的帮助文档 实例对象: 通过构造函数创建出来,实例化的对象 静态对象: 不需要创建,直接就是一个对象,方法(静态方法)直接通过这个对象名字调用 实例方法必须通过实例对 ...
- HTTP中的Accept-Encoding、Content-Encoding、Transfer-Encoding、Content-Type
Accept-Encoding和Content-Encoding Accept-Encoding和Content-Encoding是HTTP中用来对采用何种压缩格式传输正文进行协定的一对header. ...
- PgadminⅢ对PostgreSQL中的数据导出insert格式的SQL文档给别的数据库用
导出的sql文件:
- css字体标签相关
斜体: i:斜体em:斜体,强调的意思,有特殊含义,尽量用i或者cssfont-style:字体风格 normal默认值,italic斜体,oblique倾斜的字体 粗体: b,strong:粗体fo ...
- iotop使用方法
iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具.iotop 具有与 top 相似的 UI,其中包括 PID.用户.I/O.进程等相关信息. 安装 yum install iot ...
- CookieJar转换成不同的数据格式
- day_92_11_14flask的启动和orm,反向生成model
一.自定义命令. 在flask中也可以将应用改写成可以使用命令的形式,需要用到模块: pip install flask-script 使用关键字manage使得其能使用终端启动: from flas ...
- 设计模式-State(行为模式)-很好的实现了对象的状态逻辑与动作实现的分类,状态逻辑在State的派生类实现,动作可以放在Context类中实现。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Context.h #pragma once class State; class Context { public: C ...