spring中使用了好多设计模式,其中的jdbcTemplate就是一个,使用了模版方法。
什么是模版设计模式?
意思就是某一个业务逻辑的大致过程是一样的,其中具体的某一个步骤与具体的实现有关,那么就把公共逻辑抽象出来,设计成父类中的方法,然后剩下的逻辑可能与具体的实现类相关,就让子类去实现,去定制,如果完全需要子类实现就写成抽象的,否则可以提供一个默认的实现。
public abstract class t {
public void templateMethod() {
this.common();
this.concrete();
}
private void common() {
}
abstract public void concrete();
}
上述模版类又一个模版方法templateMethod(),实现过程有两步,第一步是公共的逻辑common,第二步是与具体业务类型相关的,所以定义为抽象的,让子类去实现。这样做的好处是,每一个子类只需要实现不同的地方即可,相同的地方只写一次。
jdbcTemplate就是一个很好的使用上述情景的例子,因为传统的jdbc过程是模版化的建立连接,封装sql,执行等等,最起码打开和关闭是每一个jdbc都要执行的过程,那么可以把他们写成common类型的,然后具体查询结果转换成具体的实体类的过程可以让子类去实现,这样每一个jdbc的类只要写很少的代码就可以。query方法就是上面的templateMethod方法。
更进一步,是不是每一种查询需求都要新建一个类去处理jdbc查询?也不是,可是使用回调函数,就是在query方法里面传入一个回调接口,来代表具体业务的处理逻辑。这样一个模版类就可以应对几乎所有的查询需求。要注意这里并不是dao的设计,比dao更下一层,是dao用jdbc,dao本身肯定是每一个业务一个实现,但是jdbc不用,现实中我们也确实是所有的dao用一个jdbc的实例。