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;
}
分享到:
相关推荐
hibernateTemplate的常用方法
HibernateTemplate的方法部分使用,还有部分的个人见解,有错的,请指出,谢谢
hibernateTemplate常用方法.htm
spring HibernateTemplate汇总
HibernateTemplate的简单示例
HibernateTemplat技术,此文档详细描述了HibernateTemplate的方法及功能说明,并有实例。
HibernateTemplate的用法总结,我自己整理的,仅供参考
HibernateTemplate 的常规用法.doc HibernateTemplate 的常规用法.doc
关于使用HibernateTemplate
HibernateTemplate源代码
对Spring框架中,HibernateTemplate的使用,底层dao中HibernateTemplate的使用以及HibernateCallBack调用等等
Callback 接口: import org.hibernate.Session; public interface MyHibernateCallback { public void doInHibernate(Session s); }
GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。
Spring整合hibernate(2)之基于HibernateTemplate的整合,jar需要自己添加!
对于Hiberante对数据库种数据删除操作的归纳
HibernateTemplate类的使用
JavaWeb开发,Sping框架,才用Hibernate Template进行字段截取,分组统计实现方法。
基于HIbernateTemplate的代码自动生成,能够自动生成dao和service文件,提高开发效率
spring hibernatetemplate