【设计模式-模板方法模式】
时间:2022-07-24
本文章向大家介绍【设计模式-模板方法模式】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
【导读】有很多过程是有流程步骤的,即是先做什么,后做什么,都已经定义好了,但具体每个步骤怎么去实现交由具体实施人。这个就是模板方法。
一、定义
定义了一个算法骨架,允许子类为一个或多个步骤提供实现。使子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。
二、实例
比如房屋建造有几个步骤,地基、主体以及装修。此时会有毛坯房以及精装修两种情况。
抽象房屋对象:
public abstract class AbstractHouse {
/**
*@author liusy
*@date 2020/3/6 0006 23:53
*@desc 定义一个建造房屋的固定步骤,也就是模板
*@param * @param null
*@return
*/
protected final void makeHouse(){
makeBase();
makeFrame();
//是否需要进行精装修
if (isFitment()) {
makeFitment();
}
System.out.println("房子建造完成");
}
final void makeBase(){
System.out.println("创建地基");
}
final void makeFrame(){
System.out.println("建造主体");
}
final void makeFitment(){
System.out.println("对房子进行精装修");
}
/**
*@author liusy
*@date 2020/3/6 0006 23:52
*@desc
*@param * @param null
*@return 是否需要进行精装修
*/
protected abstract boolean isFitment();
}
精装修:
public class FitmentHouse extends AbstractHouse{
@Override
protected boolean isFitment() {
return true;
}
}
毛坯房:
public class RoughcastHourse extends AbstractHouse{
//返回false表示不需要进行精装修
@Override
protected boolean isFitment() {
return false;
}
}
测试类:
//精装修
AbstractHouse house = new FitmentHouse();
house.makeHouse();
System.out.println("==============================");
//毛坯房
AbstractHouse house1 = new RoughcastHourse();
house1.makeHouse();
运行结果:
接下来看一下类图:
三、源码实例
(1)HttpServlet的doGet或者doPost方法
- excel导入与导出
- 【LeetCode 204】关关的刷题日记40 Number of Boomerangs
- 洛谷P1339 [USACO09OCT]热浪Heat Wave(最短路)
- excel导出类
- 我的HTML总结之常用基础便签
- php性能监测模块XHProf
- php dirname(__FILE__) 获取当前文件的绝对路径
- 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)
- 微信公众平台开发接口PHP SDK完整版
- 我的HTML总结之HTML发展史
- BZOJ 4152: [AMPPZ2014]The Captain(最短路)
- js获取div编辑框,textarea,input text的光标位置,兼容FF和IE
- BZOJ 4289: PA2012 Tax(最短路)
- php QR Code二维码生成类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用这些不太常用的 CSS 属性,让我在前端布局效率上,又提高了一个层次!
- CDN缓存的理解
- 二叉树的所有路径
- JavaScript 字符串中的 pad 方法!
- python随机生成经纬度(用于爬虫参数伪造)
- [Go]GO语言实战-gorm获取insert的自增id 和 struct标签不映射到表字段
- 安装vcs
- Mercari数据集——机器学习&深度学习视角
- 查找重复姓名的sql语句
- nginx如何限制并发连接请求数?
- RTSP协议视频平台EasyNVR证书配置界面上传文件地址自动填写错误怎么处理?
- 开发RTSP/RTMP/GB28181/海康SDK/EHome视频融合平台EasyCVR,使用vue-cli3项目搭建多页面模式的方法
- 互联网视频直播&点播平台RTMP推流组件EasyRTMP在弱网环境下推流稳定吗?会不会有推流失败的问题?
- 安防融合视频云服务EasyCVR集成海康EHome协议实现设备录像回看返回会话ID为-1是什么情况?
- git .gitignore 忽略规则的匹配语法