J2EE框架(四)核心设计模式
这一章主要讲两种设计模式:
建造者设计模式和工厂设计模式,这两种设计模式在持久层框架基本上都是一起出现,建造者用于加载资源为工厂做好准备,工厂专门用来生产具体对象。
这里的资源往往是框架开放给用户自定义的信息,比如:数据库配置信息、spring上下文配置信息。建造者模式负责把这些信息加载到内存并封装到一个对象中。
工厂模式利用构建在内存中的对象,来创建具体的某个对象(比如:session)
因此
1、 建造者我们只需要构建一次——把持久化数据(配置文件信息)内存化(封装到内存中),构建者的使命就算完成。
2、 工厂会一直产生各种对象,所以工厂在整个框架中一直存在,一般情况下只存在一个单列对象。
1、建造者类图
2、工厂模式类图
框架代码模拟:
模拟内容为获取mybatis和hibernate 的session, 先用建造者模式加载配置文件构建出产品DBEntity(保存配置文件信息-也就是内存化),再把产品交给工厂创建出不同的session
建造者模式
/*** 产品* @author chenDong**/
public class DBEntity {private String db_url; //数据库连接private String db_driverName; //驱动private String db_userName;//用户名private String db_password;//用户密码private String db_dialect;//hibernate方言private String db_tag;//框架标志,mybaits=1,hibernate=2public String getDb_tag() {return db_tag;}public void setDb_tag(String db_tag) {this.db_tag = db_tag;}public String getDb_url() {return db_url;}public void setDb_url(String db_url) {this.db_url = db_url;}public String getDb_driverName() {return db_driverName;}public void setDb_driverName(String db_driverName) {this.db_driverName = db_driverName;}public String getDb_userName() {return db_userName;}public void setDb_userName(String db_userName) {this.db_userName = db_userName;}public String getDb_password() {return db_password;}public void setDb_password(String db_password) {this.db_password = db_password;}public String getDb_dialect() {return db_dialect;}public void setDb_dialect(String db_dialect) {this.db_dialect = db_dialect;}}
/*** 构建接口* @author chenDong**/
public interface DBBuilder {/*** 根据配置文件获取mybaits必须信息* @param configPath 配置路径*/public void configMybatis(String configPath);/*** 根据配置文件获取hibernate必须信息* @param configPath 配置路径*/public void configHibernate(String configPath);/*** 设置mybaits标志*/public void mybatisTag();/*** 设置hibernate标准*/public void hibernateTag();/*** 创建具体的产品(hibernate或mybatis)* @return*/public DBEntity createEntity();
}
/*** 具体构建* @author Administrator**/
public class ConcreteBuilder implements DBBuilder {/*** 创建框架实体对象对象*/private DBEntity dbEntity=new DBEntity();public void configMybatis(String configPath) {//从配置文件读取信息设置到实体对象中省略
// dbEntity.setDb_driverName(db_driverName);
// dbEntity.setDb_password(db_password);
// dbEntity.setDb_url(db_url);}public void configHibernate(String configPath) {//从配置文件读取信息设置到实体对象中省略
// dbEntity.setDb_driverName(db_driverName);
// dbEntity.setDb_password(db_password);
// dbEntity.setDb_url(db_url);
// dbEntity.setDb_dialect(db_dialect);//多了方言}public void mybatisTag() {//设置标志为1为mybatis,MYBAITISTAG常量值为1// dbEntity.setDb_tag(MYBAITISTAG);}public void hibernateTag() { //设置标志为2为,HIBERNATETAG常量值为2// dbEntity.setDb_tag(HIBERNATETAG);}/*** 返回产品*/public DBEntity createEntity() {return dbEntity;}}
/*** 总导演,由总导演确定构建hibernate还是mybatis* @author chenDong**/
public class Director {//持有构建者private DBBuilder builder;public Director(DBBuilder builder){this.builder=builder;}/*** 具体有导演类指导构建hibernate信息实体* @param configPath 配置文件路径* @return hibernate信息实体*/public DBEntity buildHibernate(String configPath){builder.configMybatis(configPath);builder.mybatisTag();return builder.createEntity();}/*** 具体有导演类指导构建mybaitis信息实体* @param configPath 配置文件路径* @return mybatis信息实体*/public DBEntity buildMybatis(String configPath){builder.configMybatis(configPath);builder.mybatisTag();return builder.createEntity();}}
工厂模式:
/*** Session接口* @author chenDong**/
public interface Session {public Connection createSession();}
/*** hibernatreSession 具体的实现* @author chenDong**/
public class HibernateSession implements Session{//持有构建出来的创建连接的对象private DBEntity dbEntity;public HibernateSession(DBEntity dbEntity){this.dbEntity=dbEntity;}public Connection createSession() {//根据dbEntity信息创建hibernate连接省略return null;}}
/***mybatissession 具体的实现* @author chenDong**/
public class MyBatisSession implements Session {//持有构建出来的创建连接的对象private DBEntity dbEntity;public MyBatisSession(DBEntity dbEntity){this.dbEntity=dbEntity;}public Connection createSession() {//根据dbEntity信息创建mybats连接省略return null;}}
/*** session工厂* @author Administrator**/
public interface SessionFactory {/*** 根据数连接信息创建Session* @param dbEntity* @return*/public Session createSession(DBEntity dbEntity);
}
/*** hibernate工厂* @author Administrator**/
public class HibernateSessionFactory implements SessionFactory{public Session createSession(DBEntity dbEntity) {return new HibernateSession(dbEntity);}}
/*** mybatis工厂* @author chenDong**/
public class MybatisFactory implements SessionFactory{public Session createSession(DBEntity dbEntity) {return new MyBatisSession(dbEntity);}}
@Testpublic void testDB(){//创建构建者DBBuilder builder=new ConcreteBuilder();//创建导演Director director=new Director(builder);//获得构建出的产品,数据库连接信息DBEntity dbbatis=director.buildMybatis("configPath");DBEntity dbhibernate=director.buildHibernate("configPath");//创建hibernatesession工厂SessionFactory hibernatFactory=new HibernateSessionFactory();//根据工厂创建sessionSession hibernateSession=hibernatFactory.createSession(dbhibernate);//创建mybatissession工厂SessionFactory mybatisFactoy=new MybatisFactory();Session mybatissession=mybatisFactoy.createSession(dbbatis);}
J2EE框架(四)核心设计模式相关推荐
- Java开源——常见J2EE框架简介
Java开源--常见J2EE框架简介 Spring Framework Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口 ...
- Activiti源码分析(框架、核心类。。。)
Activiti源码分析(框架.核心类...) 目录 概 述 activiti源码分析(一)设计模式 总结: 相关工具如下: 分析: 小结: 参考资料和推荐阅读 LD is tigger foreve ...
- 浅谈javaweb三大框架和MVC设计模式
浅谈javaweb三大框架和MVC设计模式 转载自:http://blog.csdn.net/sunpeng19960715/article/details/50890705 小序:博主以前在学jav ...
- 软考常考的四种设计模式
软考常考的四种设计模式 1.观察者模式 1. 定义 2. 类型 3. 别名 4. 角色 5. 类图 2.桥接模式 1. 定义 2. 类型 3. 角色 4. 类图 3.访问者模式 1. 定义 2. 类型 ...
- J2EE框架设计技术分析
设计目标: 1. 开发效率 2. 性能.预算 3. 符合OO设计 4. 避免复杂性 5. 可维护性.可扩展性,可重用性 分布式应用 不足: ...
- 【金三银四】设计模式面试题(2021最新版)
目录 前言 1.什么是设计模式 2.为什么要学习设计模式 3.设计模式分类 4.设计模式的六大原则 5.单例模式 5.1 什么是单例 5.2 哪些地方用到了单例模式 5.3 单例优缺点 5.4 单例模 ...
- 框架模式与设计模式之区别
http://my.oschina.net/u/991183/blog/109854 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念. 框架.设计模式 ...
- spring框架 AOP核心详解
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...
- 框架模式和设计模式的区别
框架模式和设计模式的区别 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念.[7] 框架.设计模式这两个概念总容易被混淆,其实它们之间还是有区别的. 框架 ...
- Hadoop精华问答:Hadoop框架最核心的设计是?
2006年项目成立的一开始,"Hadoop"这个单词只代表了两个组件--HDFS和MapReduce.到现在的13个年头,这个单词代表的是"核心",今天我们就来 ...
最新文章
- nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
- C++之变量的作用域,生存期,可见性
- 特斯拉自动驾驶系统秘密,来自特斯拉AI总监爆料
- 《CCNP TSHOOT 300-135学习指南》——1.2节结构化故障检测与排除方法
- mysql大于等于怎么写_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...
- LINUX下载编译wabt(反编译wasm)
- Python 求峰值
- 盘点微信的前世今生,微信成功的必然和偶然
- appcan中,地图插件调用百度导航
- 聚类有效性指标(CVI)
- RAID(独立磁盘冗余阵列)
- 硬件课程设计—电梯控制系统
- 战略升级|蜜拓蜜·蜜女王集团战略升级,更名“京沅”集团
- python画心形代码大全_Python代码合集看点 机器人算法、自动导航算法算法大全...
- Solidworks2016安装的时候遇到下面问题
- 电脑无法登录TIM / QQ的一种解决方案
- T45 LaTex特殊符号
- thinkjdbc 关闭_变向关闭thinksns的缓存
- 独立表情包壁纸喝酒神器功能微信小程序源码
- react antd-mobile v2图片选择器ImagePicker压缩图片上传腾讯云COS处理方案
热门文章
- Microsoft sqlserver2000如何导入.mdf格式的数据库文件
- 最新好用的服装零售进销存软件排行榜
- Git报错:Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch
- 西门子S7-200SMART四种密码解密软件
- c语言中lookup函数功能,Lookup函数以及0/的用法
- 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
- 绿云酒店管理系统 服务器要求,绿云宾馆管理软件系统基础-20210728170313.docx-原创力文档...
- 基于SSM开发的的小区物业管理系统小程序源码
- MySQL数据库应用与实践教程答案_MySQL数据库应用与实践教程(21世纪高等学校计算机教育实用规划教材)...
- Win10中卸载IE11