轉載請註明出處:http://blog.csdn.net/lhy_ycu/article/details/39806973
模板方法模式(Template Method):在一個方法中定義了一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以再不改變算法結構的情況下,重新定義算法中的某些步驟。簡而言之:模板方法定義了一個算法的步驟,並允許子類爲一個或多個步驟提供實現。
一、uml建模:
二、代碼實現:
/**
* 示例:模板方法定義了一個算法的步驟,並允許子類爲一個或多個步驟提供實現。
*
* 以喫飯爲例:有幾個步驟 --> 煮飯+燒菜+喫飯中+喫完了
*/
abstract class AbstractTemplate {
public final void haveMeal() {
zhuFan();
shaoCai();
duringMeal();
finish();
}
public abstract void zhuFan();
public abstract void shaoCai();
public void duringMeal() {
System.out.println("喫飯中...");
}
public void finish() {
System.out.println("喫完了...");
}
}
class Sub1 extends AbstractTemplate {
@Override
public void zhuFan() {
System.out.println("使用電飯煲煮飯...");
}
@Override
public void shaoCai() {
System.out.println("使用爐竈燒菜...");
}
}
class Sub2 extends AbstractTemplate {
@Override
public void zhuFan() {
System.out.println("使用高壓鍋煮飯...");
}
@Override
public void shaoCai() {
System.out.println("使用電磁爐燒菜...");
}
}
/**
* 客戶端測試類
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
AbstractTemplate at1 = new Sub1();
at1.haveMeal();
System.out.println("\n");
AbstractTemplate at2 = new Sub2();
at2.haveMeal();
}
}
三、總結
模板方法模式:一個抽象類中,有一個主方法,再定義1...n個方法,可以抽象,可以不抽象,定義子類繼承該抽象類,重寫抽象方法,通過調用抽象類,實現對子類的調用。