C10) Template(模板模式) 定義:定義一個操作的算法的框架,將一些步驟的實現(xiàn)推遲到子類。模板模式在不改變算法結構的前提下,允許子類重定義算法的某些步驟。 模板模式非常好的利用了繼承重載的特性,先給出操作要實現(xiàn)的步驟大綱,暫緩某些步驟的實現(xiàn),把這部分交由不同的子類來完成。這個模式就像平時常做的填寫表格,表格就是模板,每張?zhí)顚懞玫谋砀穸际沁@個模板的一個子類。 現(xiàn)在假設要實現(xiàn)一個數(shù)據(jù)復制的功能,我們將這個功能分為幾個步驟:1)打開數(shù)據(jù)源和目標 3)讀取數(shù)據(jù) 4)數(shù)據(jù)格式化 5)寫入數(shù)據(jù) 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(); } } 接下來,需要實現(xiàn)一個從數(shù)據(jù)庫復制到文件的功能 public class DB2File extends CopyTemplate { public void open() { //建立數(shù)據(jù)庫連接 //創(chuàng)建文件訪問對象 } public void getData() { //查詢操作,取得ResultSet } public void formatData() { //格式化數(shù)據(jù) } public void putData() { //寫文件 } public void close() { //關閉數(shù)據(jù)庫連接 //關閉文件訪問對象 } } 如果需要文件向數(shù)據(jù)庫復制 public class File2DB extends CopyTemplate { public void open() { //建立數(shù)據(jù)庫連接 //創(chuàng)建文件訪問對象 } public void getData() { //讀文件 } public void formatData() { //格式化數(shù)據(jù) } public void putData() { //生成InsertQuery并執(zhí)行 } public void close() { //關閉數(shù)據(jù)庫連接 //關閉文件訪問對象 } } 調用的時候 CopyTemplate action1 = new DB2File(); action1.doCopy(); CopyTemplate action2 = new File2DB(); action2.doCopy(); 上面模板用到了抽象類,主要是為了強制子類實現(xiàn)。對于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)推薦
|