当前位置: 首页 > news >正文

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

模板方法模式

1. 什么是模板方法

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

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

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

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

其实很多框架中都有用到了模板方法模式
例如:数据库访问的封装、Junit单元测试、servlet中关于doGet/doPost方法的调用等等

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

例如:

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

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

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

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
package com.lijie;

public class RestaurantGinsengImpl extends RestaurantTemplate {

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

    void payment() {
        System.out.println("5快");
    }
}

  1. 具体的模板方法子类 2
package com.lijie;

public class RestaurantLobsterImpl  extends RestaurantTemplate  {

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

    void payment() {
        System.out.println("50块");
    }
}

  1. 客户端测试
package com.lijie;

public class Client {

    public static void main(String[] args) {
        //调用第一个模板实例
        RestaurantTemplate restaurantTemplate = new RestaurantGinsengImpl();
        restaurantTemplate.process();
    }
}

相关文章:

  • Chromium浏览器启动参数
  • 【Python】Windows跟随程序启动和关闭系统代理
  • 支持多校 微信课表小程序源码 排课小程序源码 支持导入课表 情侣课表 背景设置
  • 【零分配的 JSON 日志记录器】高性能日志框架——ZeroLog
  • MySQL几种方法的数据库备份
  • 代码随想录图论 第一天 | 797.所有可能的路径 200. 岛屿数量
  • 读书笔记之《敏捷测试从零开始》(一)
  • IOS(刘海/留海/流海)屏幕判断
  • CPU眼里的C/C++:1.2 查看变量和函数在内存中的存储位置
  • 黑豹程序员-架构师学习路线图-百科:API接口测试工具Postman
  • 【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决
  • mysql全文索引
  • mybatis书写
  • 怎么保护公司文件安全
  • java中的异常,以及出现异常后的处理【try,catch,finally】
  • 多线程进阶
  • 基于yolov5的目标检测和双目测距
  • python sqlalchemy(ORM)- 02 表关系
  • ESP32C3 LuatOS TM1650②动态显示累加整数
  • *#220807#你还记得么 国产手机*#220807#隐藏的功能
  • 发挥全国劳模示范引领作用,加速汽车产业电智化转型
  • 日趋活跃!2024年我国数据生产总量同比增长25%
  • “上报集团文化助力区域高质量发展赋能平台”揭牌
  • 诗词文赋俱当歌,听一听古诗词中的音乐性
  • 上海乐高乐园建设进入最后冲刺,开园限量纪念年卡将于5月开售
  • 北美票房|《罪人》遭媒体唱衰,好莱坞业内人士集体反击