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

模板方法模式

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();
    }
}
相关推荐
DKPT4 小时前
Java设计模式之行为型模式(责任链模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
使一颗心免于哀伤7 小时前
《设计模式之禅》笔记摘录 - 6.原型模式
笔记·设计模式
ffcf1 天前
设计模式—专栏简介
设计模式
tianchang1 天前
SSR 深度解析:从原理到实践的完整指南
前端·vue.js·设计模式
饕餮争锋1 天前
设计模式笔记_创建型_建造者模式
笔记·设计模式·建造者模式
小小寂寞的城1 天前
JAVA策略模式demo【设计模式系列】
java·设计模式·策略模式
一块plus1 天前
深度详解 Revive 和 Precompile 技术路径
后端·设计模式·架构
智想天开1 天前
31.设计模式的反模式与常见误区
设计模式
小飞悟1 天前
组件通信的艺术:从 props 钻井到 context 共享的进化之路
前端·javascript·设计模式
Point1 天前
[ahooks] useEventEmitter源码阅读
前端·javascript·设计模式