【设计模式】模板方法模式

模板方法模式

1. 什么是模板方法

模板方法模式:定义一个操作中的算法骨架(父类),而将一些步骤延迟到子类中。

模板方法使得子类可以不改变一个算法的结构来重定义该算法的

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

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

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

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

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

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

例如:

去餐厅吃饭,餐厅给我们提供了一个模板就是:看菜单,点菜,吃饭,付款,走人

(这里 "点菜和付款" 是不确定的由子类来完成的,其他的则是一个模板。)

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

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

java 复制代码
package com.lijie;

//模板方法
public abstract class RestaurantTemplate {

	// 1.看菜单
	public void menu() {
		System.out.println("看菜单");
	}

	// 2.点菜业务
	abstract void spotMenu();

	// 3.吃饭业务
	public void havingDinner(){ System.out.println("吃饭"); }

	// 3.付款业务
	abstract void payment();

	// 3.走人
	public void GoR() { System.out.println("走人"); }

	//模板通用结构
	public void process(){
		menu();
		spotMenu();
		havingDinner();
		payment();
		GoR();
	}
}
  1. 具体的模板方法子类 1
java 复制代码
package com.lijie;

public class RestaurantGinsengImpl extends RestaurantTemplate {

    void spotMenu() {
        System.out.println("人参");
    }

    void payment() {
        System.out.println("5快");
    }
}
  1. 具体的模板方法子类 2
java 复制代码
package com.lijie;

public class RestaurantLobsterImpl  extends RestaurantTemplate  {

    void spotMenu() {
        System.out.println("龙虾");
    }

    void payment() {
        System.out.println("50块");
    }
}
  1. 客户端测试
java 复制代码
package com.lijie;

public class Client {

    public static void main(String[] args) {
        //调用第一个模板实例
        RestaurantTemplate restaurantTemplate = new RestaurantGinsengImpl();
        restaurantTemplate.process();
    }
}
相关推荐
txinyu的博客12 小时前
常见设计模式
设计模式
云游云记12 小时前
php设计模式总结
开发语言·设计模式·php
Engineer邓祥浩15 小时前
设计模式学习(20) 23-18 中介者模式
学习·设计模式·中介者模式
不穿格子的程序员15 小时前
设计模式篇2——观察者模式:以直播间送礼系统举例
java·观察者模式·设计模式
小码过河.15 小时前
设计模式——解释器模式
java·设计模式·解释器模式
老蒋每日coding16 小时前
AI Agent 设计模式系列(二十)—— 优先级排序设计模式
人工智能·设计模式
鱼跃鹰飞1 天前
设计模式系列:工厂模式
java·设计模式·系统架构
老蒋每日coding1 天前
AI Agent 设计模式系列(十九)—— 评估和监控模式
人工智能·设计模式
会员果汁1 天前
23.设计模式-解释器模式
设计模式·解释器模式
「QT(C++)开发工程师」2 天前
C++设计模式
开发语言·c++·设计模式