iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >浅析Java模板方法的一种使用方式
  • 858
分享到

浅析Java模板方法的一种使用方式

Java模板方法使用方式Java模板方法使用Java模板方法 2023-02-23 11:02:50 858人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

为什么我会想到使用模板方法呢? 在日常开发中,我们经常需要使用编程式事务来解决一些实在的业务问题。以Hibernate框架为例(其实对于ORM框架来说,都大同小异。我们公司使用的是H

为什么我会想到使用模板方法呢?

在日常开发中,我们经常需要使用编程事务来解决一些实在的业务问题。以Hibernate框架为例(其实对于ORM框架来说,都大同小异。我们公司使用的是Hiberante,所以这里就以Hibernate为例了),我们实现一个编程式事务如下:

SessionFactory sessionFactory = (SessionFactory) applicationContext.getBean("sessionFactory");
Session session = sessionFactory.openSession();
try {
    session.beginTransaction();
    String sql = "update table set A = :a where id = :id";
    session.createNativeQuery(sql)
            .setParameter("a", "a")
            .setParameter("id", id)
            .executeUpdate();
    session.getTransaction().commit();
} catch (Exception e) {
    session.getTransaction().rollback();
} finally {
    session.close();
}

我们看上述的代码是不是有一种很乱的感觉,还要自己去写try{}catch{}finally{}。而且当我们代码中有很多地方都应用了编程式事务的话,那么我们的代码会显得有些臃肿。尤其对于我这种强迫症患者来说,哈哈!!

既然如此,我们肯定要想一种方式去优化一下,至少让它看起来更优美一些。我这里选择使用模板方法来改造一下。

什么是模板方法设计模式?

模板方法说白了就是将一段代码模板化,将通用的代码段抽取出来,并提供一些自定义的接口去定制的特定位置的某些业务功能。

根据我的理解,模板方法的核心思想就是 重写 。我们在模板中的指定位置提供一个外部可编辑的接口,让调用者可以根据需求去随意重写这个接口来达到他的目的。

其实在spring中也广泛使用的模板方法,当我们学习Spring源码的时候会发现,实际上Bean的生命周期中就使用了模板方法。我们可以根据自己的需求在Bean生命周期的各个阶段去做一些事情。

代码优化

首先我们先维护一个抽象的模板类,这个类里包含了三个公开的方法,用来提供为调用者去定制使用。

public abstract class TransactionManagerTemplate {

    
    public void handle() {}

    
    public void exceptionHandle() {}

    
    public void finallyHandle() {}

}

然后我们创建一个事务管理器,封装一个runTransaction方法,里面就包含了上面那边不忍直视的代码。然后我们将Session和抽象的模板类作为参数传入

并且将抽象的模板类中的三个公开方法填入到try{}catch{}finally{}中的各个位置。

@Component
public class TransactionManager {

    @Autowired
    private ApplicationContext applicationContext;

    
    public static final String DEFAULT_SESSION_FACTORY = "sessionFactory";


    
    public void runTransaction(Session session, TransactionManagerTemplate transactionManagerTemplate) {
        try {
            session.beginTransaction();
            transactionManagerTemplate.handle();
            session.getTransaction().commit();
        } catch (Exception e) {
            transactionManagerTemplate.exceptionHandle();
            session.getTransaction().rollback();
        } finally {
            transactionManagerTemplate.finallyHandle();
            session.close();
        }
    }

    
    public SessionFactory getSessionFactory() {
        return getSessionFactory(DEFAULT_SESSION_FACTORY);
    }

    
    public SessionFactory getSessionFactory(String beanName) {
        SessionFactory sessionFactory = (SessionFactory) applicationContext.getBean(beanName);
        if(sessionFactory == null) {
            throw new BAPException("不存在BeanName为【{}】的SessionFactory", beanName);
        }
        return sessionFactory;
    }

    
    public Session getSession() {
        return getSessionFactory(DEFAULT_SESSION_FACTORY).openSession();
    }

    
    public Session getSession(String sessionFactoryBeanName) {
        return getSessionFactory(sessionFactoryBeanName).openSession();
    }

}

我们在业务代码中想要再次使用编程式事务时,就可以通过如下方式调用:

Session session = transactionManager.getSession();
transactionManager.runTransaction(session, new TransactionManagerTemplate() {
    @Override
    public void handle() {
        // try中要添加的业务逻辑
    }

    @Override
    public void exceptionHandle() {
        // catch中要添加的业务逻辑
    }

    @Override
    public void finallyHandle() {
        // finally中要添加的业务逻辑
    }
});

看,这是不是更美观了一些呀!

以上就是浅析Java模板方法的一种使用方式的详细内容,更多关于Java模板方法的资料请关注编程网其它相关文章!

--结束END--

本文标题: 浅析Java模板方法的一种使用方式

本文链接: https://www.lsjlt.com/news/197292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅析Java模板方法的一种使用方式
    为什么我会想到使用模板方法呢? 在日常开发中,我们经常需要使用编程式事务来解决一些实在的业务问题。以Hibernate框架为例(其实对于ORM框架来说,都大同小异。我们公司使用的是H...
    99+
    2023-02-23
    Java模板方法使用方式 Java模板方法使用 Java模板方法
  • Java设计模式之浅谈模板方法模式
    一. 什么是模板方法设计模式 从字面意义上理解, 模板方法就是定义出来一套方法, 作为模板, 也就是基础。 在这个基础上, 我们可以进行加工,实现个性化的实现。比如:一日餐三. 早餐...
    99+
    2022-11-12
  • Java模板方法的使用方式有哪些
    这篇文章主要介绍了Java模板方法的使用方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java模板方法的使用方式有哪些文章都会有所收获,下面我们一起来看看吧。为什么我会想到使用模板方法呢?在日常开发中...
    99+
    2023-07-05
  • Java设计模式之模板方法模式实例分析
    本文小编为大家详细介绍“Java设计模式之模板方法模式实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式之模板方法模式实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。模板方法模式模板方...
    99+
    2023-06-29
  • 分析设计模式之模板方法Java实现
    目录一、什么是模板方法设计模式1.1、模板方法的用途1.2、模板方法的定义二、定义模板方法的步骤2.1、定义模板类2.2、定义具体子类2.3、定义客户端调用2.4 下抽象类和子类之间...
    99+
    2022-11-12
  • 浅析C++可变参数模板的展开方式
    目录前言可变参数模板的定义参数包的展开递归函数方式展开逗号表达式展开enable_if方式展开折叠表达式展开(c++17)总结前言 可变参数模板(variadic templates...
    99+
    2022-11-13
  • 怎么Java项目中使用模板方法模式
    本篇文章为大家展示了怎么Java项目中使用模板方法模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。模拟抽象类:public abstract class Temple...
    99+
    2023-05-31
    java ava 模板方法模式
  • PHP中模板方法模式的示例分析
    小编给大家分享一下PHP中模板方法模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!模板方法模式,也是我们经常会在不经意间有会用到的模式之一。这个模式是...
    99+
    2023-06-20
  • 一文带你厉害Java设计模式中的模板方法
    目录概念举例钩子方法总结概念 在一个方法中定义了一个算法的骨架或者步骤,而将一些步骤延迟到子类中去实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某一些步骤。 该...
    99+
    2023-01-30
    Java模板方法设计模式 Java 模板方法 Java 设计模式
  • 怎么理解Java设计模式的模板方法模式
    这篇文章主要讲解了“怎么理解Java设计模式的模板方法模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的模板方法模式”吧!一、什么是模板方法模式模板方法模式在一个方...
    99+
    2023-06-25
  • 浅谈Java生成唯一标识码的三种方式
    目录前言正文UUID实现唯一标识码SnowFlake实现唯一标识码通过时间工具生成带有业务标示的唯一标识码前言 我们经常会遇到这样的场景,需要生成一个唯一的序列号来表明某一个数据的唯...
    99+
    2022-11-13
  • 浅析Java中Future接口的使用方法
    目录引言一、Future接口简介二、Future接口的原理三、Future接口的核心方法解析四、Future接口的实现类五、Future接口的源码解读六、Future接口的使用示例结...
    99+
    2023-05-19
    Java Future接口使用方法 Java Future接口使用 Java Future接口
  • 如何使用JavaScript实现模板方法模式
    模板方法模式是一种行为设计模式,它是指将一个算法的骨架定义在一个操作中,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。在本文中,我们将介绍如何使用 JavaScript 实现模板方法模式。实...
    99+
    2023-05-14
  • java模版方法模式的示例分析
    这篇文章给大家分享的是有关java模版方法模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java模版方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可...
    99+
    2023-05-30
    java
  • win10系统怎么切换平板模式?win10平板模式的使用方法
    window10作为最新的系统,新增功能可以切换为平板使用,非常方便用户,看看怎么开启平板模式吧。 1、打开桌面下方的”开始菜单“。 2、选择”settings&ld 3、点击进...
    99+
    2023-06-11
    win10平板系统 win10平板模式 平板 模式 win10 使用 方法
  • python Django模板的使用方法
    模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。...
    99+
    2022-06-04
    使用方法 模板 python
  • 浅析Angular项目中使用 SASS 样式的方法
    SASS 提供了两种编写的语法,一种是 .scss 为后缀,另一种是 .sass 为后缀。.scss 为后缀,语法用 {} 修饰.sass 为后缀,语法是缩紧方式推荐使用 .scss项目集成angular 项目使用脚手架生成,在添加样式这一...
    99+
    2022-11-22
    Angular
  • 浅谈go中cgo的几种使用方式
    目录最简单的CGO程序源码方式调用C函数内部机制编译和链接参数编译参数:CFLAGS/CPPFLAGS/CXXFLAGS链接参数:LDFLAGS通过静态库的方式调用C函数通过动态库的...
    99+
    2022-11-13
  • JAVA设计模式零基础解析之单例模式的八种方式
    目录单例模式简介:单例模式优点:应用场景:单例设计模式的八种方式:1、饿汉式(静态常量)2、饿汉式(静态代码块)3、懒汉式(线程不安全)4、懒汉式(线程安全,同步方法)5、懒汉式(线...
    99+
    2022-11-12
  • 浅析github上包的使用方法
    随着互联网技术的不断发展,软件开发行业也愈发繁荣。在这个过程中,像GitHub这样的平台成为了开发者们相互交流分享代码的重要平台之一。而在GitHub上,开发者们分享的代码往往以“包”的形式呈现。本文将为大家介绍如何在GitHub上使用这些...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作