文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java模板方法的使用方式有哪些

2023-07-05 05:57

关注

这篇文章主要介绍了Java模板方法的使用方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java模板方法的使用方式有哪些文章都会有所收获,下面我们一起来看看吧。

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

在日常开发中,我们经常需要使用编程式事务来解决一些实在的业务问题。以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{}中的各个位置。

@Componentpublic 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模板方法的使用方式有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯