Template Method模式介绍:
Template Method模板方法模式是一种行为型模式,具体点说是行为类型模式。主要解决在软件构建过程中,对于某一项任务,常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因而无法和任务的整体结构同时实现。
GoF《设计模式》中说道:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
HibernateTemplate类的execute方法即为模板方法,代码如下
public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {
Assert.notNull(action, "Callback object must not be null");
Session session = getSession();
.......................
Object result = action.doInHibernate(sessionToExpose);
........................
}
Spring的HibernateTemplate帮我们完成了如下工作:
获取会话,
开始事务,
处理异常,
显式提交变化到db,
关闭会话。
execute方法中只有对数据库的操作操作doInHibernate()不同,其他比如对异常的检查,session等资源的获得和释放都相同,
即execute方法的总流程架子不变,而只有数据库的操作即doInHibernate方法是变化的,
所以将他的实现,以某种方式(在这里是内联类)延迟到其他地方实现,这应该就是Template Method模式
网上摘录:
Template Method要点
1、 Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为了很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2、 除了可以灵活应对子步骤的变化外,“Don't call me.Let me Call you”的反向控制结构是Template Method的典型应用。“Don’t call me.Let me Call you”是指一个父类调用一个子类的操作,而不是相反。
3、 在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。可以没有具体实现的方法应该称为hook operation(钩子操作),提供了缺省的行为,子类可以在必要时进行扩展。
4、 尽量减少primitive operation,因为需要重新定义的操作越多,客户程序就越长
Javaeye会员的理解,
Buaawhl:
IoC, Functor, Visitor 都是 callback。
就是一个 Template Methond 里面的flow不变,某一个步骤的具体操作变化,这个变化部分需要从外部(参数,或者属性,或者 override parent method)注入。
类似于从前的 C 回调函数指针。
MainFlow ( callback ){
step1;
........
callback( someThing );
....
stepN;
}
分享到:
相关推荐
本篇文章将探讨如何使用Hibernate实现泛型DAO,并结合Spring模板来增强其功能。 泛型DAO是一种设计模式,它通过定义一个通用的DAO接口或抽象类,可以适用于不同的实体类,减少了重复的代码。这种模式的核心在于利用...
- 用 Ajax 实现异步刷新功能,解决了全屏刷新资源消耗大及出空白页面等待的问题,也极大地减轻了网络传输的压力,并结合 JavaScript 技术丰富页面动态效果 - 完善了该项目的相关文档资料 * 人事管理系统 + 软件...
Spring 整合 Hibernate 是一种常见的企业级应用开发模式,它将 Spring 框架的管理优势与 Hibernate 的持久层功能结合起来,提供了更高效、更稳定的应用解决方案。在本学习笔记中,我们将深入探讨如何实现这一整合,...
在实际应用中,Spring DAO模式的实现通常会结合使用上述组件,通过配置文件(XML或Java配置)来定制数据访问行为,同时利用IoC(控制反转)和AOP(面向切面编程)特性,使得数据访问层能够灵活地与其他组件协作。...
HibernateTemplate可将Hibernate的持久层访问模板化。创建HibernateTemplate后,注入一个SessionFactory的引用,就可以执行相关操作了。 HibernateTemplate提供了3个构造函数 HibernateTemplate(SessionFactory sf) ...
2. **模板模式**:Spring提供了`HibernateTemplate`类,它类似于`JdbcTemplate`,可以用来简化Hibernate的操作。通过这个模板类,开发者可以更简洁地实现增删查改等基本操作。 3. **自动注入与便利获取**:Spring...
当Spring整合Hibernate时,它为Hibernate提供了模板类`HibernateTemplate`,这个模板类简化了数据库操作,同时保持了事务的一致性。`HibernateTemplate`提供了诸如`save()`, `update()`, `delete()`, `get()`, `load...
它提供了一组与`HibernateTemplate`类似的模板方法,用于执行iBATIS的SQL映射文件中的SQL语句。 4. **JPA(Java Persistence API)DAO支持:** Spring支持JPA,包括传统的JPA API和Spring Data JPA。使用`...
此外,Spring的JdbcTemplate和HibernateTemplate还可以用于实现数据库操作的模板方法模式,提高了代码的可读性和可重用性。 总的来说,Spring 2.5 和 Hibernate 的结合为Java开发人员提供了一套强大的工具,用于...
`JdbcTemplate`是Spring框架提供的一个用于简化JDBC编程的工具类,它封装了许多常用的数据库操作,如查询、更新等,并且通过模板模式设计,提供了灵活的扩展机制。这使得开发者能够更专注于业务逻辑而非繁琐的JDBC...
这是基于模板方法的设计模式,简化了数据访问层的代码。 每种事务管理方法都有其适用场景,选择哪种方式取决于项目需求、团队习惯以及对事务控制的精细程度。理解并灵活运用这五种事务管理方法,能有效提升Spring...
Struts2是MVC模式的一种实现,它结合了WebWork的优点和Struts1的社区资源。Struts2提供了一种强大的拦截器(Interceptor)机制,用于在Action执行前后添加自定义逻辑。在Struts2中,Action类定义了业务逻辑,结果...
2. `getHibernateTemplate()`: 返回一个`HibernateTemplate`实例,该模板类封装了许多常用的Hibernate操作,如保存、更新、删除和查询等,使得操作数据库变得更加简洁。 3. `getSession()`: 提供对当前事务上下文中...
2. **Freemarker**:Freemarker是一个模板语言,其主要任务是将数据模型与HTML或其他格式的模板结合,生成最终的输出。开发者在模板中定义占位符,Freemarker会根据提供的数据模型替换这些占位符。这种方式使得视...
源码中,`JdbcTemplate`和`HibernateTemplate`是两个典型的数据库访问模板类,它们封装了SQL执行和结果集处理,简化了数据库操作。 5. **Web层(Web)**:Spring MVC是Spring框架的Web部分,提供了一种模型-视图-...
2. **实现DAO接口**:接着,创建DAO接口的实现类,使用Spring提供的模板类或ORM框架来实现这些方法。 3. **配置Spring**:在Spring的配置文件中,定义DAO Bean,指定其实现类,并注入必要的依赖,如数据源、...
1. springdaoHibernate:这部分内容可能涉及到Spring的DAO支持和Hibernate的整合,讲解了如何使用Spring的JDBC模板和HibernateTemplate来简化数据库操作,以及如何配置Spring来管理Hibernate的SessionFactory。...
4. **创建DAO接口**:定义数据访问接口,不直接操作Session,而是使用Spring提供的模板方法。 5. **实现DAO**:继承`HibernateDaoSupport`,注入`HibernateTemplate`,实现DAO接口的方法。 6. **事务管理**:在...
设计模式是解决常见编程问题的模板,能够提高代码的可重用性和可维护性。 4. **数据库技术**: 陶**熟练使用Oracle和MySQL数据库,这涵盖了SQL查询、事务处理和存储过程。 5. **Web技术**: 他熟练使用JSP、HTML、...