Template method pattern 模板方法模式。
它是多態(tài)技術(shù)的一種應(yīng)用。代碼如下,
abstract class MyTemplate{
abstract void step1();
abstract void step2();
abstract void step3();
/**
* 這就是模板。被子類共用。
*/
final void TemplateMethod(){
step1();
step2();
step3();
}
}
子類(略)。
所有子類會共用模板方法。不同子類對抽象方法的實現(xiàn)不同,但大的藍(lán)圖并未改
變。戰(zhàn)役的方式不同,戰(zhàn)略并未受到影響?;蛘哒f,大的戰(zhàn)略制定下來,小的戰(zhàn)
役你們自己看著辦就行。
架子是怎么搭起來的?架子就是這么搭起來的。架構(gòu)師是做什么的?架構(gòu)師就是
搭架子的人。
常說的I call you 而不是 You call me 就表現(xiàn)于此。子類的編寫者不用考慮去
調(diào)用某個算法方法,只需要關(guān)注實現(xiàn)自己的方法,自然就會被更高一級的方法調(diào)
用。
模板方法也可以看是個大的算法架子,算法的具體步驟被子類來實現(xiàn)。
Stragegy模式也是跟算法有關(guān)的模式,這里比較它們一下。
Stragegy模式是做一件事情有多種算法實現(xiàn),這種被實現(xiàn)推遲到子類里實現(xiàn)。
Template模式是算法已經(jīng)確定,而實現(xiàn)步驟的細(xì)節(jié)被推遲到子類里實現(xiàn)。
Strategy 代碼如下,
interface Strategy {
int execute(int a, int b);
}
class Context {
private Strategy strategy;
// Constructor
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.execute(a, b);
}
}