1. 程式人生 > >設計模式 - 模板方法模式

設計模式 - 模板方法模式

col closed abs concrete style package println -1 san

定義:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。

模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。

角色:

抽象類(AbstractClass):實現了模板方法,定義了算法的骨架。 具體類(ConcreteClass):實現抽象類中的抽象方法,已完成完整的算法。 代碼示例:抽象類定義了整個從做飯到吃飯最後清理的流程,子類是具體的不同的方式。 抽象類:定義骨架 技術分享
package com.template;

public abstract class AbstractEat {
    
    // 模板方法裏面定義一連串的步驟
    final
void eatProcess(){ cook(); eat(); pack(); } abstract void cook(); abstract void eat(); // 共有的相同操作,父類直接實現,不須子類覆蓋 final void pack(){ System.out.println("餐後清理。。。"); } }
View Code

具體類:

1、中餐

技術分享
package com.template;

public class ChineseFood extends
AbstractEat { @Override void cook() { System.out.println("中餐做飯。。。"); } @Override void eat() { System.out.println("中餐吃法。。。"); } }
View Code

2、西餐

技術分享
package com.template;

public class WesternFood extends AbstractEat {

    @Override
    void cook() {
        System.out.println(
"西餐做飯。。。"); } @Override void eat() { System.out.println("西餐吃法。。。"); } }
View Code

測試類:

技術分享
package com.template;

public class TestTemplate {

    public static void main(String[] args) {
        AbstractEat c = new ChineseFood();
        c.eatProcess();
        
        AbstractEat w = new WesternFood();
        w.eatProcess();

    }

}
View Code

總結:

1、模板方法可以提供代碼的復用,把具體實現推遲到子類中。

2、為防止子類覆蓋方法,可以將方法定義為final。

3、模板方法模式和策略模式都可以封裝算法和行為,一個用繼承,一個用組合。

設計模式 - 模板方法模式