定義一個操做中的算法的框架,而將一些步驟延遲到子類中。使得子類不改變算法結構便可衝定義該算法的某些特定步驟。算法
也許看定義有些懵逼,可是模板方法模式在設計模式中算是簡單的了,僅僅使用了Java的繼承機制。可是它的應用是很是普遍的。咱們先舉個簡單的例子讓你們對於模板方法模式有個直觀的瞭解。設計模式
裏面有兩個角色bash
例如咱們定義個抽象的汽車類,裏面有汽車啓動、中止、喇叭三個操做。可是每一個汽車的這三個操做都是不一樣的。可是向客戶演示的時候都是一樣操做啓動、中止、按喇叭。因此這就是一個典型的模板方法模式。框架
abstract class AbstractCar{
protected abstract void run();
protected abstract void stop();
protected abstract void alarm();
public final void templateMethod(){
run();
stop();
alarm();
}
}
複製代碼
接下來定義兩輛實際的汽車ide
class BmwCar extends AbstractCar{
@Override
protected void run() {
System.out.println("寶馬 跑");
}
@Override
protected void stop() {
System.out.println("寶馬 停");
}
@Override
protected void alarm() {
System.out.println("寶馬 喇叭叫");
}
}
class HmCar extends AbstractCar{
@Override
protected void run() {
System.out.println("悍馬 跑");
}
@Override
protected void stop() {
System.out.println("悍馬 停");
}
@Override
protected void alarm() {
System.out.println("悍馬 喇叭叫");
}
}
複製代碼
因此在調用的時候根據不一樣的車建立不一樣的角色便可spa
AbstractCar bmw = new BmwCar();
bmw.templateMethod();
AbstractCar hm = new HmCar();
hm.templateMethod();
複製代碼
抽象模板中的基本方法儘可能設計爲protected類型,符合迪米特法則,不須要暴露的屬性或者方法儘可能設置爲protected類型。設計