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, ...
随机推荐
- go语言中strings包常用方法
strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 strings.HasSuffix(s string, suffix ...
- JupyterLab安装与配置虚拟环境
JupyterLab安装: 推荐使用miniconda,相比于anaconda更加简洁,下载连接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/minic ...
- Oracle查看表结构
目的:通过SQL进行查看表结构,因为使用PL/SQL连接工具,连接到公司的数据库上经常断开.故改为使用Navicat连接数据库,个人觉得这个查看表结构很困难. 查看表结构和约束精简 -- 查询指定表的 ...
- React 组件传值 父传递儿子
10===> 传递参数 import React from "react" //一定要导入React // 函数类型去创建组件 export function Web1(pr ...
- MYSQL的备份与恢复--逻辑备份mysqldump
目录 0.备份与恢复概述 1.逻辑备份-完整备份与恢复 2.逻辑备份-增量备份与恢复 (1)环境准备 (2)恢复全量数据 (3)恢复增量备份 3.新来的开发妹子删了库! (1)模拟环境准备 (2)全备 ...
- 机器学习--主成分分析(PCA)算法的原理及优缺点
一.PCA算法的原理 PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十四周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十四周学习总结 实验十二 Swing图形界面组件(一) 实验时间 2019-11-29 第一部分:基础知识总结 1.设计 ...
- java之API初识
API概念 API(Application Programming Interface),应用程序编程接口.JavaAPI是一本程序员的字典 ,是JDK中提供给 我们使用的类的说明文档.这些类将底层的 ...
- Hybrid App: 对比UIWebView和WebKit实现JavaScript与Native交互
一.简介 在前面一篇文章中讲到过实现JavaScript与Native交互的方式有一种就是使用原生内嵌webView.在iOS8之前,开发者只能使用苹果提供的UIWebView类来加载URL或者HTM ...
- MySQL 中的外键
表和表之间可存在引用关系,这在抽象数据到表时,是很常见的.这种联系是通过在表中创建外键(foreign key)来实现的. 比如一个订单,可能关联用户表和产品表,以此来记录谁买了什么产品. 约定两个概 ...