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();
}
}
子類(略)。
所有子類會(huì)共用模板方法。不同子類對(duì)抽象方法的實(shí)現(xiàn)不同,但大的藍(lán)圖并未改
變。戰(zhàn)役的方式不同,戰(zhàn)略并未受到影響?;蛘哒f(shuō),大的戰(zhàn)略制定下來(lái),小的戰(zhàn)
役你們自己看著辦就行。
架子是怎么搭起來(lái)的?架子就是這么搭起來(lái)的。架構(gòu)師是做什么的?架構(gòu)師就是
搭架子的人。
常說(shuō)的I call you 而不是 You call me 就表現(xiàn)于此。子類的編寫者不用考慮去
調(diào)用某個(gè)算法方法,只需要關(guān)注實(shí)現(xiàn)自己的方法,自然就會(huì)被更高一級(jí)的方法調(diào)
用。
模板方法也可以看是個(gè)大的算法架子,算法的具體步驟被子類來(lái)實(shí)現(xiàn)。
Stragegy模式也是跟算法有關(guān)的模式,這里比較它們一下。
Stragegy模式是做一件事情有多種算法實(shí)現(xiàn),這種被實(shí)現(xiàn)推遲到子類里實(shí)現(xiàn)。
Template模式是算法已經(jīng)確定,而實(shí)現(xiàn)步驟的細(xì)節(jié)被推遲到子類里實(shí)現(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);
}
}