模板方法模式定義為:
在一個方法中定義了一個算法的骨架或者步驟,而將一些步驟延遲到子類中去實現。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某一些步驟。
模板方法在基類中定義了一個操作的流程順序,能夠保證該步驟按序進行,有一些步驟的具體實現在基類中已經聲明,而將一些變化的步驟的具體實現交給了子類去實現,從而就達到了延遲一些步驟到子類中,模板方法一個最大的好處就是能夠設定一個業務流程能夠按照一定嚴格的順序執行,控制了整個算法的執行步驟。
這個方法將算法定義成一組步驟,其中凡是想讓子類進行自定義實現的步驟,均定義為抽象方法。抽象基類的特點是,一般將模板方法設置為final,這樣防止子類覆蓋該算法的步驟,將一些相同的操作或步驟直接在基類中實現,將一些變化的步驟設置為抽象由子類去完成。
Java實現示例
類圖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/** * 業務流程模板,提供基本框架 */ public abstract class BaseTemplate { public abstract void part1(); public abstract void part2(); public abstract void part3(); //這里為了嚴格實驗結果,使用final不可被重寫 public final void useTemplateMethod() { part1(); part2(); part3(); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/** * 模板實現方式1 */ public class TemplateMethod extends BaseTemplate { @Override public void part1() { System.out.println( "模板方法1" ); } @Override public void part2() { System.out.println( "模板方法2" ); } @Override public void part3() { System.out.println( "模板方法3" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/** * 模板實現方式2 * @author stone * */ public class TemplateMethod2 extends BaseTemplate { @Override public void part1() { System.out.println( "模板方法11" ); } @Override public void part2() { System.out.println( "模板方法22" ); } @Override public void part3() { System.out.println( "模板方法33" ); } } |
1
2
3
4
5
6
7
8
9
10
11
|
public class Test { public static void main(String[] args) { BaseTemplate tm = new TemplateMethod(); tm.useTemplateMethod(); System.out.println( "" ); BaseTemplate tm2 = new TemplateMethod2(); tm2.useTemplateMethod(); } } |
打印:
1
2
3
4
5
6
7
|
模板方法1 模板方法2 模板方法3 模板方法11 模板方法22 模板方法33 |