Spring中的Template和Callback模式
2008-01-05 20:21:35 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簻椤掋垺銇勯幇顖毿撻柟渚垮妼椤粓宕卞Δ鈧獮濠勭磽閸屾艾鈧懓顫濋妸鈺佺疅缂佸顑欓崥瀣煕椤愵偅绶氱紓鍐╂礋濮婂宕掑▎鎴М濠电姭鍋撻梺顒€绉甸幆鐐哄箹濞n剙濡肩紒鎰殜閺屸€愁吋鎼粹€茬敖婵炴垶鎸哥粔鐢稿Φ閸曨垰鍐€妞ゆ劦婢€濞岊亪姊虹紒妯诲蔼闁稿海鏁诲濠氭晲婢跺﹤宓嗛梺缁樺姈缁佹挳宕戦幘璇叉嵍妞ゆ挻绋戞禍鐐叏濡厧浜鹃悗姘炬嫹

SPRing中的Callback模式与Template模式合用,随处可见。Template method被广泛的使用,像Servlet就是使用这个模式。Template mothod模式虽然能简化很多重复的代码,但这种模式的也有不少限制。
Template mothod将一个功能的实现分成许多小的步骤,在父类中定义了这些步骤的顺序,让子类来具体实现每一个小的步骤。这些小的步骤是protected,以防止用户不正确的使用这些小的步骤而产生异常。这样就产生了一个限制,那就是你需要继续Template然后重新实现具体的小步骤。假如这个Template有许多方法,就像JdbcTemplate,假如你每次继续这个庞大的类,然后只是重写某个小步骤中来订制你自己的功能,就会显得非常粗笨,更何况数据库操作使用的如此频繁,难道你每进行一个操作就通过继续订制一个,显然不可能这么做。
Spring使用Callback模式与之配合,达到了去掉重复代码的效果,同时增加了很大的灵活性,你只需要实现某些CallBack就可轻松订制出Template。
那么什么时候才是Callback模式与Template模式结合的最佳时机呢。显然假如每个具体的步骤都需要真正去具体实现而不是简单的改变参数或设置某个对象就ok的话,使用Callback很难去订制,因为你可能需要传递多个Callback作为参数,并让用户去实现,是用java的内部类本来就是一个比较丑陋的语法,更何况参数是多个。这相当于你把每个小步骤封装成为接口,然后分别继续之然后实现。显然没有达到方便灵活的效果,这时候直接使用Template method模式就比结合Callback要好。而假如用户只需要定制一个方法能就达到用户的要求,或者更简单,只是设置不同的参数,那么使用Callback就具有很好的灵活性。
更多精彩
赞助商链接