`
java虫
  • 浏览: 533319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

结合HibernateTemplate学习模板方法模式

阅读更多
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; 
} 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics