J2EE框架(四)核心设计模式

J2EE框架技术 第一章 SSM框架搭建 2EE平台支持多种开发模式,包括MVC模式等。SpEL 模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。SpEL 模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。 阅读详情

这一章主要讲两种设计模式:

建造者设计模式和工厂设计模式,这两种设计模式在持久层框架基本上都是一起出现,建造者用于加载资源为工厂做好准备,工厂专门用来生产具体对象。

这里的资源往往是框架开放给用户自定义的信息,比如:数据库配置信息、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=2


    public 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);
    }

}
@Test
    public 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();
        //根据工厂创建session
        Session hibernateSession=hibernatFactory.createSession(dbhibernate);
        //创建mybatissession工厂
        SessionFactory mybatisFactoy=new MybatisFactory();
        Session mybatissession=mybatisFactoy.createSession(dbbatis);
    }
J2EE设计模式实战全集:Java设计模式学习资料 本文还有配套的精品资源,点击获取 简介:Java设计模式在J2EE企业级应用开发中占据核心地位,有助于提升代码的可读性、可维护性,增强系统灵活性和扩展性。本资料集合覆盖了J2EE环境下的设计模式应用,详述了单例、工厂、抽象工厂、策略、观察者、装饰器、适配器、代理、模版方法、建造者等模式,并解释了它们在J2EE中的具体应用和优势。学习这些模式有助于开发者掌握设计原则和最佳实践... 阅读详情

相关推荐

掌握J2EE高级框架:从Ajax到Spring的全面PPT教程

本文还有配套的精品资源,点击获取 简介:本资源提供了一系列PPT教程,深入讲解J2EE高级框架的关键知识点,如Ajax、EJB、Hibernate、Spring等,并包含实际案例分析,以帮助J2EE开发者提升技能。教程内容详尽,覆盖了各个框架的设计理念、核心概念、实际应用以及框架之间的整合。 1. J2EE高级框架概述 J2EE(Java 2 Platfor...

weixin_36123300的博客 699

j2ee核心模式 第二版_J2EE的体系架构——J2EE

J2EE的体系架构J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。J2EE分层客户层,运行在客户计算机上的组件,用户与系统的接口逻辑,通过http协议的来访问应用服务器。表示层,运行在J2EE服务器上的组件,通过与业务逻辑层互动...

weixin_39621178的博客 395

使用Kolla部署多节点Rocky版本OpenStack

openstack命令行客户端使用,post-deploy会在 /etc/kolla/目录下生成文件admin-openrc.sh。每次使用openstack命令时执行source /etc/kolla/admin-openrc.sh(manager节点执行)source /etc/kolla/admin-openrc.sh (将文件内容复制到/etc/profile中,即可一直生效)3.2.2 开始安装kolla-ansible,要带上--ignore-installed PyYAML,否则可能会报错。

gyc1206的博客 1926

J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(汇总帖)

J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(一) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(二) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(三) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(四) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(五) J2EE 核心模式(Core J2EE Patterns)学习

四火专栏 1692

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 461

LeRobot 入门教程(十一)π0(Pi0)π0.5(Pi0.5)训练、推理、部署

本文介绍了Physical Intelligence公司开发的π₀和π₀.₅系列通用机器人控制视觉-语言-动作模型。π₀作为首款基础模型,融合流匹配、跨实体训练等技术,支持50Hz高频控制。π₀.₅是其升级版,通过异构数据协同训练解决开放世界泛化问题,在Libero基准测试中表现优异。文章详细说明了两个模型的安装要求、使用方法、训练策略及关键参数配置,包括混合精度训练、梯度检查点等优化技术,为机器人在多样化场景中的语义理解和动作控制提供了完整解决方案。

2506_90492529的博客 5039

“那本”J2EE书——《J2EE核心模式》(第二版)译者序

“那本”J2EE书刘天北 熊节(原文刊登于《中华读书报》2005年2月23日号)  翻开这本《J2EE核心模式》,你首先就会注意到软件方法论领域的两位大师GradyBooch和MartinFowler撰写的序言。在这样两份序言后面再附上一篇“译序”,这个念头本身就足够荒谬和僭越,不啻于在莎翁之后再写一出关于丹麦王子复仇的剧本。大师们的判断是中肯而毫不含

透明思考@优快云 9158

【三维激光扫描】第二章:国内外三维激光扫描设备简介

地面三维激光扫描仪是地面激光扫描系统中最主要的硬件设备,近年来得到了快速发展,主要体现在品牌数量、性能指标、类型等方面的变化。本章主要介绍国内外主要设备的基本情况,对国内外研究现状进行分析,最后指出目前存在的问题与未来的发展趋势。 2.1 国外地面三维激光扫描仪简介 目前,生产地面三维激光扫描仪的公司比较多,随着地面三维激光扫描技术应用普及程度的不断提高,国外产品在中国的市场目前还占主导地位。它们各自的产品在性能指标上有所不同,以下简要介绍有代表性的公司产品。 2.1.1 奥地利 Riegl公司的.

智慧空间实验室 4643

编程-笔记四:J2EE设计模式-小结

J2EE设计模式是一系列用于解决Java EE应用程序开发中常见问题的设计模式。这些模式专注于如何组织应用程序的架构,以提高其可维护性、可扩展性和可复用性。

qq_45831414的博客 1202

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1364

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

J2EE核心模式一

概要 本文对J2EE企业架构应用的基本模式(Core J2EE Patterns)做一个概要介绍。 下图基本上列出了J2EE企业架构应用的基本模式,这些基本模式大致分为以下3类:表示层;逻辑处理层;集成层。 Presentation Tier Intercepting Filter: Context Object Front Controller Application Contro...

自强不息 524

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

NPU(Neural Processing Unit) 是专门用于人工神经网络推理与训练的处理器,具备高并行、低功耗、低延迟等特点。它是边缘 AI、自动驾驶、智能摄像头、语音识别等场景中的关键硬件。

moton2017的博客 2249

GoF 设计模式

GoF     定义:GoF(Gang of Four),中文名——四人组。GoF是一种设计模式。 GoF的起源   《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合...

ScNuLH 224

Pytorch入门教程

Pytorch学习总结:1.张量Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于NumPy的ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring框架与J2EE框架

Spring框架与J2EE框架 J2EE框架 简介: J2EE的全称是Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂家共同制定并得到广泛认可的工业标准。 J2EE的体系结构: 客户端层:负责与用户直接交互,J2EE支持多种客户端,所以客户端既可以是WEB浏览器,也可以是专用的Java客户端。 服务器端组件层:本层是为了基于WEB的应用服...

子敬的技术博客 8360

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaEE(J2EE)学习篇

一、简要介绍 Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为 Jakarta EE, 是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件,可以说是一个框架或是一种规范。 Java EE是 J2EE的一个新的名...

nann-viiv 的博客 925

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

起源之路——JSR?J2EE?JavaEE?

起源之路——JSR?J2EE?JavaEE? 前言 鉴于自己工作了一段时间对各种框架中间件处于知其然不知其所以然的状态中,所以萌生了追寻起源的想法,于是便开始准备编写该系列文章,系统的整理自己对J2EE的理解。若有发现理解不到位,或有不同见解的地方,欢迎各位大神拍砖。 什么是J2EE? J2EE的全称是Java 2 Platform Enterprise Edition,它是由多家公司共同参与并制...

LuoGuoHua_Xin的博客 882

J2EE

J2EE是什么,主要包括哪些技术 一、J2EE是什么? 从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它是 Java 技术不断适应和促进企业级应用过程中的产物。 适用于企业级应用的 J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的 开发、管理和部署。J2EE 是一个标准,而不是一个现成的产品。(来自百度) 二、J2EE主要包括哪些技术 servlet Servlet是java平台上的CGI技术。Servlet在服务器端运行,动态地生成

qq_42918433的博客 8209

设计模式与J2EE技术

 文章写的不好,请多提意见第一章 设计模式与J2EE技术什么是设计模式简单地说,模式是一个出现在世界上的实物,同时也是一条规则,告诉你应该如何创建一个实物、应该在何时创建。它既是过程,也是实物;既是对当前实物的描述,也是对创建实物的过程的描述。――C.Alexander,《建筑的永恒之道》[i]在软件科学中,模式有很多种,有软件的管理模式,实践证明与传统管理是有区别的,从而是一种新

cx0998的专栏 2130

黑马程序员——今天发现,JavaEE其实就是以前学过的J2EE

------- android培训、java培训、期待与您交流! ---------- 最近在去咨询一家Android培训班的时候,看到宣传册上有个JavaEE + Android,当时有点懵,因为很久不接触Java了,这个JavaEE从来没见到过,以为是Sun公司推出的新技术,当时问咨询师,但她对技术也不是很了解~ 后来,回来之后在百度一搜才发现,原来JavaEE其实就是J2

Jack·Chiang 的Android开发家园 2468

【JavaEE】JavaEE、web 开发、框架(Spring) 、Maven

Java EE 的概念,什么是 web 开发,框架的概念和优点,Maven 如何使用。

2301_79765510的博客 1996

javaee和javaee_JavaEE概念简介

javaee和javaee 这篇文章旨在阐明J2EE范例中使用的首字母缩写词和概念。 J2EE代表Java to Platform,Entreprise Edition。 它使创建模块化Java应用程序得以部署在应用程序服务器上。 它依赖于Java SE,Java SE是一组Java库的核心,所有Java应用程序都在该Java库上实现。 一般概念 在深入探讨J2EE之前,这里提醒您一些一般...

最佳 Java 编程 715

J2ee 框架

J2EE  框架 前言:      j2ee: java 2 plantform, Enterprise Edition.主要是为大企业计算机级别设计的java平 台。使用多层分布式应用模型,通过三或四层来实现。                                  框架: 1      JDBC(java数据库连接)     数据库连接,是一个行业

何新生(Daniel) 勇敢坚毅真正之才智乃刚毅之志向。 —— 拿破仑 1434

J2EE框架学习经典总结

原文地址:http://www.javadby.com/J2EE/20071004/1023.htmlJ2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向。  首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java

Jeffery Lee的专栏 1298

第01篇 · 初识JavaEE:从J2EE到Jakarta EE的演进之路

在继续往下之前,我们必须把“规范”这个概念彻底搞清楚。规范(Specification)是一套接口定义、行为约定和约束条件,它只告诉你“应该做什么”和“应该长什么样”,但不告诉你“具体怎么做”。Servlet 规范定义了类应该有doGet()doPost()方法,但不实现这些方法如何处理具体的网络请求Tomcat是 Servlet 规范的一个实现——它真正去监听端口、解析 HTTP 请求、调用你的 Servlet 代码就像JDBC 规范定义了ConnectionStatement接口,但。

2301_80720675的博客 598
上一篇: J2EE框架(三)Reflect
下一篇: 工作流(Workflow)
烟云冬少
博客等级 码龄19年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值