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, ...
随机推荐
- 剑指offer笔记面试题10----斐波那契数列
题目:求斐波那契数列的第n项.写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下:f(0) = 0, f(1) = 1,f(n) = f(n - 1) + f(n - 2). 测试用例 ...
- localstorage实现两个页面通信,购物车原理。
如:A,B页面,A为商品页,B为购物车页,两个页面同时打开,在A页面点击商品添加至购物车,切换到B页面购物车怎么显示该商品信息 利用localStroage,A页面将数据存入localStroage, ...
- Object-C里的类目,延展,协议
1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...
- iOS---------开发中 weak和assign的区别
weak和assign的区别-正确使用weak.assign 一.区别 1.修饰变量类型的区别weak只可以修饰对象.如果修饰基本数据类型,编译器会报错-“Property with ‘weak’ a ...
- 使用Settings sync同步VS Code配置
使用Settings sync同步VS Code配置 因为要在多台电脑上使用VSCode,想要简单地管理VSCode地配置,不用每次手动去一一配置,保持多个开发环境的同步,于是使用Settings s ...
- 【JDBC】JDBC入门
JDBC的入门 搭建开发环境 编写程序,在程序中加载数据库驱动 建立连接 创建用于向数据库发送SQL的Statement对象 从代表结果集的ResultSet中取出数据 断开与数据库的连接,并释放相关 ...
- Master Note: Undo 空间使用率高 (Doc ID 1578639.1)
Master Note: High Undo Space Usage (Doc ID 1578639.1) APPLIES TO: Oracle Database Cloud Schema Servi ...
- requests---requests上传图片
我们在做接口测试的时候肯定会遇到一些上传图片,然后进行校验,今天我们一起学习通过requests上传图片,查看是否上传成功 抓取上传接口 这里我以百度为例子进行操作,为啥要用百度呢,主要上传文件比较简 ...
- Python爬虫(学习准备)
编码格式的认识: 字符:各种文字和符号的统称 字符集:多个字符的集合 字符集包括:ASCII字符集,GB2312字符集,GB18030,Unicode字符集等 1个字符ASCII编码占1个字节,用Un ...
- JVM-6-垃圾回收算法
三如何垃圾回收 GC(Garbage Collection)垃圾回收算法 标记清除 速度快,但是会产生内存碎片: 标记整理 解决了标记清除内存碎片的问题,但是每次都得移动对象,因此成本 ...