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

模板方法模式

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();
    }
}
相关推荐
cliffordl17 小时前
设计模式(python)
python·设计模式
云道轩19 小时前
告诉 Claude Code 在项目中遵循特定的编程模式/设计模式和技术栈约束
设计模式·ai·agent·claude code
花间相见21 小时前
【Java基础面试题】—— 核心知识点面试题(含答案):语法+集合+JVM+设计模式+算法
java·jvm·设计模式
朱一头zcy1 天前
设计模式入门:最简单的模板方法模式
笔记·设计模式·模板方法模式
君主黑暗1 天前
设计模式-观察者模式
观察者模式·设计模式
砍光二叉树1 天前
【设计模式】结构型-组合模式
设计模式·组合模式
砍光二叉树1 天前
【设计模式】结构型-享元模式
设计模式·享元模式
电子科技圈1 天前
SmartDV展示汽车IP解决方案以赋能智驾创芯并加速规模化普及
嵌入式硬件·设计模式·硬件架构·软件工程·软件构建·设计规范
砍光二叉树1 天前
【设计模式】结构型-桥接模式
设计模式·桥接模式
姓蔡小朋友1 天前
Agent Skill设计模式
开发语言·javascript·设计模式