C10) Template(模板模式) 定义:定义一个操作的算法的框架,将一些步骤的实现推迟到子类。模板模式在不改变算法结构的前提下,允许子类重定义算法的某些步骤。 模板模式非常好的利用了继承重载的特性,先给出操作要实现的步骤大纲,暂缓某些步骤的实现,把这部分交由不同的子类来完成。这个模式就像平时常做的填写表格,表格就是模板,每张填写好的表格都是这个模板的一个子类。 现在假设要实现一个数据复制的功能,我们将这个功能分为几个步骤:1)打开数据源和目标 3)读取数据 4)数据格式化 5)写入数据 6)关闭,生成模板类如下 public abstract class CopyTemplate { public abstract void open(); public abstract void getData(); public abstract void formatData(); public abstract void putData(); public abstract void close(); public void doCopy() { open(); getData(); formatData(); putData(); close(); } } 接下来,需要实现一个从数据库复制到文件的功能 public class DB2File extends CopyTemplate { public void open() { //建立数据库连接 //创建文件访问对象 } public void getData() { //查询操作,取得ResultSet } public void formatData() { //格式化数据 } public void putData() { //写文件 } public void close() { //关闭数据库连接 //关闭文件访问对象 } } 如果需要文件向数据库复制 public class File2DB extends CopyTemplate { public void open() { //建立数据库连接 //创建文件访问对象 } public void getData() { //读文件 } public void formatData() { //格式化数据 } public void putData() { //生成InsertQuery并执行 } public void close() { //关闭数据库连接 //关闭文件访问对象 } } 调用的时候 CopyTemplate action1 = new DB2File(); action1.doCopy(); CopyTemplate action2 = new File2DB(); action2.doCopy(); 上面模板用到了抽象类,主要是为了强制子类实现。对于doCopy()方法,可以加上final关键字声明,这样子类就无法重载了。
参考: 1、 http://www./designpatterns/template.htm(中文、java实例) 2、 http://www./Patterns/PatternCommand.aspx(英文、C#实例、UML) 3、 http://www.caterpillar./PmWiki/pmwiki.php/DesignPattern/TemplateMethod(中文、java实例、UML)推荐 4、 http://www./tech/DesignPattern/TemplateMethod.html(日文、java实例、UML)推荐
|