Template模式就是在父类中定义一个操作中的骨架算法,而将一些用户自定义的逻辑延迟到子类中,这里以一个示例来说明,假如所有的business方法中都必须要进行用户验证(validateUser)、异常捕获、进行一个业务操作,那么我们就给用户验证、异常捕获封装到父类中,子类中只需要写一些business代码就可以了,父类代码如下:
public
abstract
class
BusinessTemplate
...
{
public void execute() throws Exception ...{
validateUser();
try ...{
business();
doBusiness();
} catch (Error e) ...{
e.printStackTrace();
}
}
void validateUser() ...{
System.out.println("验证用户...");
};
void business()...{
System.out.println("业务1");
}
public abstract void doBusiness();
}
public void execute() throws Exception ...{
validateUser();
try ...{
business();
doBusiness();
} catch (Error e) ...{
e.printStackTrace();
}
}
void validateUser() ...{
System.out.println("验证用户...");
};
void business()...{
System.out.println("业务1");
}
public abstract void doBusiness();
}
这里是一个抽象类,有个execute()方法,在这个方法中进行了用户验证、异常捕获和一个业务执行,在这3项任务结束后执行了doBusiness()方法,同时doBusiness()方法又是一个抽象方法,继承该抽象类就要重写这个抽象方法,在这里定义用户自己的业务,写一个子类如下:
public
class
Business
extends
BusinessTemplate
...
{
public void doBusiness() ...{
System.out.println("自定义的业务");
}
}
public void doBusiness() ...{
System.out.println("自定义的业务");
}
}
这里继承类就重写了doBusiness方法,这里定义一个用户自己的业务,接着写一个测试类如下:
package
spring.chapter4.template;
public class TestTemplate ... {
public static void main(String[] args) throws Exception ...{
Business business = new Business();
business.execute();
}
}
public class TestTemplate ... {
public static void main(String[] args) throws Exception ...{
Business business = new Business();
business.execute();
}
}
这里的
Business
类调用了父类的
execute
方法,也就说按
execute()
方法的执行顺序来执行,运行结果如下:
验证用户
...
业务
1
自定义的业务
这里
Business
类是
BusinessTemplate
的一个子类,原本也需要写用户验证、异常捕获等业务,而采用了一个父类模板就给所有的业务都省略了,其他任何需要进行用户验证、异常捕获、业务一这些操作的逻辑都只需要继承
BusinessTemplate
然后只需要写用户的逻辑代码就可以了,再也不用重复写那些重复的逻辑了,
Spring
中正是采用了这样的方法来封装了数据库操作的
Connection
、
Statement
这些连接、关闭以及异常捕获等。