天天看點

設計模式——模闆方法模式(TemplateMethod)模闆方法設計模式(取餐館吃飯示例)

文章目錄

  • 模闆方法設計模式(取餐館吃飯示例)
    • 0. UML結構圖
    • 1. 取餐館吃飯示例 Code
      • 1.1 模闆 - 餐館抽象類
      • 1.2 面食餐館
      • 1.3 海鮮餐館
      • 1.4 火鍋餐館
    • 2. 取餐館吃飯示例 Test
代碼:GitHub

模闆方法設計模式(取餐館吃飯示例)

0. UML結構圖

設計模式——模闆方法模式(TemplateMethod)模闆方法設計模式(取餐館吃飯示例)

1. 取餐館吃飯示例 Code

1.1 模闆 - 餐館抽象類

public abstract class Restaurant {

    /**
     * 點餐
     */
    private void orderDishes() {
        System.out.println("Restaurant.orderDishes 點餐");
    }

    /**
     * 做菜
     */
    protected abstract void cook();

    /**
     * 付款
     */
    private void payMoney() {
        System.out.println("Restaurant.payMoney 收錢");
    }

    /**
     * 吃飯
     */
    public void haveAMeal() {
        orderDishes();
        cook();
        payMoney();
    }

}
           

1.2 面食餐館

public class NoodleRestaurant extends Restaurant {

    @Override
    protected void cook() {
        System.out.println("NoodleRestaurant.cook 制作面食");
    }

}
           

1.3 海鮮餐館

public class SeafoodRestaurant extends Restaurant {

    @Override
    protected void cook() {
        System.out.println("SeafoodRestaurant.cook 制作海鮮菜品");
    }

}
           

1.4 火鍋餐館

public class HotpotRestaurant extends Restaurant {

    @Override
    protected void cook() {
        System.out.println("SeafoodRestaurant.cook 制作火鍋");
    }

}
           

2. 取餐館吃飯示例 Test

public class TemplateTest {

    public static void main(String[] args) {
        Restaurant seafoodRestaurant = new SeafoodRestaurant();
        seafoodRestaurant.haveAMeal();

        Restaurant noodleRestaurant = new NoodleRestaurant();
        noodleRestaurant.haveAMeal();

    }

}