`

Template模式

阅读更多
Java事务处理全解析(五)—— Template模式
在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理。

 

这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:

git clone https://github.com/davenkin/java_transaction_workshop.git

 

Template模式大家应该都很熟悉,比如Spring就提供了许多Template,像JdbcTemplate和JmsTemplate等。Template模式的基本思想是:在超类里将完成核心功能的方法声明为抽象方法,留给子类去实现,而在超类中完成一些通用操作,比如JMS的Session的建立和数据库事务的准备工作等。

 

在本篇文章中,我们使用一个Template类来帮助管理事务,定义TransactionTemplate类如下:


package davenkin.step4_transaction_template;

import davenkin.step3_connection_holder.TransactionManager;
import javax.sql.DataSource;

public abstract class TransactionTemplate
{
    private TransactionManager transactionManager;

    protected TransactionTemplate(DataSource dataSource)
    {
        transactionManager = new TransactionManager(dataSource);
    }

    public void doJobInTransaction()
    {
        try
        {
            transactionManager.start();
            doJob();
            transactionManager.commit();
        } catch (Exception e)
        {
            transactionManager.rollback();
        } finally
        {
            transactionManager.close();
        }
    }

    protected abstract void doJob() throws Exception;
}

 

在TransactionTemplate类中定义一个doJobInTransaction方法,在该方法中首先使用TransactionManager开始事务,然后调用doJob方法完成业务功能,doJob方法为抽象方法,完成业务功能的子类应该实现该方法,最后,根据doJob方法执行是否成功决定commit事务或是rollback事务。

 

然后定义使用TransactionTemplate的TransactionTemplateBankService:


package davenkin.step4_transaction_template;

import davenkin.BankService;
import davenkin.step3_connection_holder.ConnectionHolderBankDao;
import davenkin.step3_connection_holder.ConnectionHolderInsuranceDao;
import javax.sql.DataSource;

public class TransactionTemplateBankService implements BankService
{
    private DataSource dataSource;
    private ConnectionHolderBankDao connectionHolderBankDao;
    private ConnectionHolderInsuranceDao connectionHolderInsuranceDao;

    public TransactionTemplateBankService(DataSource dataSource)
    {
        this.dataSource = dataSource;
        connectionHolderBankDao = new ConnectionHolderBankDao(dataSource);
        connectionHolderInsuranceDao = new ConnectionHolderInsuranceDao(dataSource);
    }

    public void transfer(final int fromId, final int toId, final int amount)
    {
        new TransactionTemplate(dataSource)
        {
            @Override
            protected void doJob() throws Exception
            {
                connectionHolderBankDao.withdraw(fromId, amount);
                connectionHolderInsuranceDao.deposit(toId, amount);
            }
        }.doJobInTransaction();
    }
}

 

在TransactionTemplateBankService的transfer方法中,我们创建了一个匿名的TtransactionTemplate类,并且实现了doJob方法,在doJob方法中调用两个DAO完成业务操作,然后调用调用TransactionTemplateBankService的doJobInTransaction方法。

 

由于TransactionTemplate只是对上一篇文章中事务处理的一层封装,故TransactionManager和两个DAO类都保持和上一篇中的一样,此时他们都使用SingleThreadConnectionHolder获得Connection,故事务处理成功。

分享到:
评论

相关推荐

    策略模式 template模式

    策略模式(Template模式) 策略模式是设计模式中的一种 객체行为型模式,它定义了一系列算法,封装每一个算法,并使它们可以互相替换。策略模式使得算法可以独立于使用它的客户而变化。 概述 在软件开发中,经常...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 单最常用的设计模式入门,比如AbstractFactory模式、Adapater模式、Composite模式、Decorator模式、Factory模式、Observer模式、Strategy模式、Template模式等

    设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...

    Eclipse Template与模式

    ### Eclipse Template与模式结合应用详解 #### 一、引言 在软件开发过程中,模板(Template)和设计模式(Design Pattern)是两个重要的概念。模板主要用于简化代码编写过程中的重复工作,提高编码效率;而设计...

    C++ Template模式

    模板模式是设计模式中的一种行为模式,它属于创建型设计模式,但更常被归类为结构型模式。在C++编程中,模板模式是一种处理相同算法不同实现的方式,它通过定义一个操作中的算法骨架,而将一些步骤延迟到子类中,...

    Template(模板模式)

    模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义对象间的一系列基本操作,并在子类中实现这些操作的具体步骤。在模板模式中,一个抽象类公开定义了执行它的方法的方式,而将具体实现延迟到子类中...

    Java设计模式之模板模式(Template模式)介绍

    模板模式(Template Pattern)是设计模式中的一种行为模式,它提供了一种代码复用的方式,通过定义一个操作的框架,将具体的实现细节留给子类来完成。这种模式使得程序的结构更加清晰,同时也增强了代码的可扩展性。...

    23种设计模式(C++).pdf

    - Template模式:在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中。Template方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 - Strategy模式:定义一系列的算法,把它们一个个...

    设计模式原理与应用之行为模式.pptx

    Template模式是一种行为模式,旨在解决定义一个操作中的算法骨架,而将一些步骤延迟到子类中的问题。该模式可以定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 Visitor模式 Visitor模式是一种行为模式,...

    设计模式C++版

    1. Template模式,模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 2. Strategy模式,策略模式,定义一系列算法,把它们一个个封装起来,并使它们可相互替换。 3. State模式,状态模式,...

    Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析1

    5. Template 模式:Template 模式在 Tomcat 中主要应用于模板引擎,例如在 Server.xml 文件中,我们可以看到许多 Template 的实现,例如 JasperTemplateEngine 等,这些 Template 负责生成动态页面。 设计模式分析...

    23种设计模式解析附C++实现

    1. Template模式,定义一个操作中的算法的骨架,将一些步骤延迟到子类中。Template方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2. Strategy模式,定义一系列算法,将每一个算法封装起来...

    C++ 设计模式 (C++ 设计模式精解 + 代码实现)

    Template模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 #### 3.2 Strategy模式 Strategy模式定义了一系列的算法,并将每一个...

    设计模式精解

    本书对Template模式、Strategy模式、State模式、Observer模式、Memento模式、Mediator模式、Command模式、Visitor模式、Chain of Responsibility模式和Iterator模式进行了详细解析。Template模式定义一个操作中的...

    GoF 23种设计模式解析附C++实现源码(2nd Edition)

    Template模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 #### Strategy模式 Strategy模式定义了一系列的算法,并将每一个算法...

    template-matcher:lodash.template模式匹配提取到单独的模块中

    模板匹配器 模式匹配提取到单独的模块中安装npm install template-matcher --save用法 var matcher = require ( 'template-matcher' ) ;var matches = matcher ( '<div><input type="${attr}"/>${content}...

    C++设计模式精解

    5. 行为模式:包括Template模式、Strategy模式、State模式、Observer模式、Memento模式、Mediator模式、Command模式、Visitor模式和Chain of Responsibility模式等。行为模式关注的是对象之间的通信,实现高内聚、低...

    uml设计模式ppt

    - **Template模式**:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它使子类可以在不改变算法结构的情况下重定义某些特定步骤。 4. **8 设计模式(2)--Strategy, Bridge模式.ppt** - **...

Global site tag (gtag.js) - Google Analytics