什麼是模版方法模式
現實生活中,模版到處都是,比如,小學生優秀作文模版,購房合同模版,還有生產各種甜品蛋糕的模具。
模版就是一套約定好的規則,套用模版就可以生產出符合規則的具體事物。
具體到編程領域的設計模式,模版就是抽象類的抽象方法。
因爲抽象方法只有聲明,沒有實現,非常適合規則的描述,所以前人就利用抽象類的特性,摸索出了模版方法模式。
設計與實現
模版方法模式是一種非常容易掌握的模式,重點就是抽象類的抽象方法,用抽象方法描述規則邏輯,用抽象類的子類將規則具體化。
好了,不需要講那麼多,看看標準的模版代碼就都能懂:
// 抽象類的模版方法
public abstract class Template {
// 模版方法
public void templateMethod() {
System.out.println("...前置邏輯...");
specific();
System.out.println("...後置邏輯...");
}
// 需要子類實現的方法(規則)
protected abstract void specific();
}
// 子類將規則具體化
public class Concrete extends Template {
@Override
protected void specific() {
System.out.println("子類實現具體規則邏輯");
}
}
// 模式應用場景
public static void main(String[] args) {
Template template = new Concrete();
template.templateMethod();
}
抽象方法specific()
用protected
修飾並非必須的,只是通常這樣做會更好一些。
因爲,在模版方法模式中,抽象方法是拿給子類實現的,一般不會暴露給外界調用,外界關注的是模版方法templateMethod()
,而它又在抽象類中早就定義好了,不需要子類再去重寫。
因此,無論有多少具體的子類,抽象模版的運行邏輯都是同一套,是固定不變的,子類無需關心,這也就是模版方法模式的精髓之處。