1.什么是模板方法

  • 模板方法模式:定义一个操作中的算法骨架(父类),而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构来重定义该算法的

    2.什么时候使用模板方法

  • 实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分需要改变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。

    3.实际开发中应用场景哪里用到了模板方法

  • 其实很多框架中都有用到了模板方法模式

  • 例如:数据库访问的封装、Junit单元测试、servlet中关于doGet/doPost方法的调用等等

    4.现实生活中的模板方法

    例如:
  1. 去餐厅吃饭,餐厅给我们提供了一个模板就是:看菜单,点菜,吃饭,付款,走人 (这里 “点菜和付款” 是不确定的由子类来完成的,其他的则是一个模板。)

    5.代码实现模板方法模式

  2. 先定义一个模板。把模板中的点菜和付款,让子类来实现。

    1. //模板方法
    2. public abstract class RestaurantTemplate {
    3. // 1.看菜单
    4. public void menu() {
    5. System.out.println("看菜单");
    6. }
    7. // 2.点菜业务
    8. abstract void spotMenu();
    9. // 3.吃饭业务
    10. public void havingDinner(){ System.out.println("吃饭"); }
    11. // 3.付款业务
    12. abstract void payment();
    13. // 3.走人
    14. public void GoR() { System.out.println("走人"); }
    15. //模板通用结构
    16. public void process(){
    17. menu();
    18. spotMenu();
    19. havingDinner();
    20. payment();
    21. GoR();
    22. }
    23. }
  3. 具体的模板方法子类1

    1. public class RestaurantGinsengImpl extends RestaurantTemplate {
    2. void spotMenu() {
    3. System.out.println("人参");
    4. }
    5. void payment() {
    6. System.out.println("5快");
    7. }
    8. }
  4. 具体的模板方法子类 2

    1. public class RestaurantLobsterImpl extends RestaurantTemplate {
    2. void spotMenu() {
    3. System.out.println("龙虾");
    4. }
    5. void payment() {
    6. System.out.println("50块");
    7. }
    8. }
  5. 客户端测试

    1. public class Client {
    2. public static void main(String[] args) {
    3. //调用第一个模板实例
    4. RestaurantTemplate restaurantTemplate = new RestaurantGinsengImpl();
    5. restaurantTemplate.process();
    6. }
    7. }