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

常用设计模式系列(十四)—模板方法模式

常用设计模式系列(十四)—模板方法模式

第一节

前言

之前我完成了创建型设计模式和结构型设计模式,我们今天将踏入设计模式的第三章:行为型设计模式,你是否还记得什么是行为型设计模式吗?行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。今天开始讲解第一篇,模板方法模式,所谓模板,就是定义相同的模板规范,去构建固定行为与可扩展行为,每个可扩展行行为可以有自己的特点。

第二节

模板方法模式

模板方法模式(Template
Method):一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

个人理解(Person
Understand):抽象类可以定义一些普通方法及抽象方法,普通方法按照自己的规范进行定义即定义流程,但是流程中的每个步骤都可以在子节点进行特例化处理,在上层定义规范,在下层在规范的基础上进行特殊化处理。

模板方法模式构成:

在这里插入图片描述

在这里插入图片描述

小杨同学入职后,需要去银行办理一张工资卡,来到银行后,银行提供了两种办卡方式,第一为人工办理、第二种为机器自助办理,可根据自己的选择完成办卡。办卡流程为:填写个人身份信息、人像识别、密码设置、签名留存。使用机器和人工都可以完成卡的办理。银行所定义的开卡流程就是我们模板方法模式中的,抽象模板类用来定义流程,那么人工办卡和机器自主办卡则是两种具体实现类。

在这里插入图片描述

image

第三节

代码实现

1.编写抽象模板类

package com.yang.templatemethod;/*** @ClassName AbstractOpenCar* @Description 抽象模板类-开卡* @Author IT小白架构师之路* @Date 2021/1/5* @Version 1.0**/
public abstract class AbstractOpenCar {//开卡public void  openCar(String password){writeInfo();faceDistinguish();givePass(password);autograph();}/*** 填写个人信息*/public abstract void writeInfo();/*** 人脸识别*/public void faceDistinguish(){System.out.println("识别人脸:人脸识别系统");}//设置密码public void givePass(String password){System.out.println("设置密码:密码设置为"+password);}//签名public abstract void autograph();}

2.编写具体子类A

package com.yang.templatemethod;/*** @ClassName ArtificialOpen* @Description 人工开卡* @Author IT小白架构师之路* @Date 2021/1/5* @Version 1.0**/
public class ArtificialOpen extends AbstractOpenCar{@Overridepublic void writeInfo() {System.out.println("信息填写:提供个人信息,银行业务人员帮忙录入");}@Overridepublic void autograph() {System.out.println("签名确认:纸质签名确认");}
}

3.编写具体子类B

package com.yang.templatemethod;/*** @ClassName AutonomyOpen* @Description 机器自助开卡* @Author IT小白架构师之路* @Date 2021/1/5* @Version 1.0**/
public class AutonomyOpen extends AbstractOpenCar{@Overridepublic void writeInfo() {System.out.println("信息填写:机器手动填写个人信息");}@Overridepublic void autograph() {System.out.println("签名确认:电子签名确认");}
}

4.测试客户端

package com.yang.templatemethod;/*** @ClassName Client* @Description 客户端测试* @Author IT小白架构师之路* @Date 2021/1/5* @Version 1.0**/
public class Client {public static void main(String[] args) {AbstractOpenCar openCar = new ArtificialOpen();System.out.println("选择人工开卡-----------");openCar.openCar("123789");System.out.println("结束人工开卡-----------");openCar = new AutonomyOpen();System.out.println();System.out.println("选择自助开卡-----------");openCar.openCar("147258");System.out.println("结束自助开卡-----------");}
}

5.程序运行结果如下,程序使用银行两种开卡方式完成了模板方法模式

选择人工开卡-----------
信息填写:提供个人信息,银行业务人员帮忙录入
识别人脸:人脸识别系统
设置密码:密码设置为123789
签名确认:纸质签名确认
结束人工开卡-----------选择自助开卡-----------
信息填写:机器手动填写个人信息
识别人脸:人脸识别系统
设置密码:密码设置为147258
签名确认:电子签名确认
结束自助开卡-----------

第四节

优缺点及适用场景
优点

1.模板模式既定义了固定的流程,又支持了扩展功能,将固定的不可修改的在父类定义,子类去实现扩展的功能。

2.父类提供的公共方法,也便于代码复用

3.扩展的方法,父类不实现,交给了子类,子类可以通过继承的方式增加功能,符合了设计模式中的开闭原则。

缺点

1.如果要定义不同的实现,则需要创建新的实现类,业务增多时会增加类的数量,增加了系统的复杂性。

2.因为是通过继承实现的,如果父类增加新的流程规范(抽象方法),所有的子类都要修改源码来实现。

适用场景

1.当需要一个父类定义流程规范,但需要子类去实现的算法,父类负责不变的模块,子类负责扩展的模块时。

2.需要控制子类的扩展时(定义规范)。

3.需要将多个子类中的公共模块抽象提取出来到父类,解决代码冗余时。

4.例如我们JavaWeb开发过程中使用的servlet、filter都是使用了模板方法。

扫描二维码

关注我吧

IT小白架构师之路

image

http://www.lryc.cn/news/602089.html

相关文章:

  • 开源智能体-JoyAgent集成ollama私有化模型
  • C#与C++交互开发系列(二十六):构建跨语言共享缓存,实现键值对读写与数据同步(实践方案)
  • 基于百度 iframe 框架与语音解析服务的数字人交互系统实现
  • 元宇宙工厂前端新形态:Three.js与WebGL实现3D产线交互的轻量化之路
  • Python系统交互库全解析
  • CentOS 7 安装 dnsmasq 解决nginx无法指定dns的问题
  • 新能源行业B端极简设计:碳中和目标下的交互轻量化实践
  • GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【三】
  • Windows 系统分辨率切换** 与 **Qt4 无边框窗口管理机制** 的交互
  • 全面解析MySQL(4)——三大范式与联合查询实例教程
  • Deep Learning_ Foundations and Concepts-Springer (2024)【拜读】前向编码器20章
  • 【CSS】设置表格表头固定
  • 深度学习----视觉里程计
  • 工业场景工服识别准确率↑32%!陌讯多特征融合算法实战解析
  • STM32 usb HOST audio USB 音频设备 放音乐
  • Pandas 里的分箱操作
  • 负载均衡集群HAproxy
  • MCP工作原理
  • Java-泛型类的定义与使用
  • 浅谈面试中的递归算法
  • 【Linux】编辑器vim和编译器gcc/g++
  • 解析分区、挂载与块设备:Linux 存储管理核心命令详解
  • 近屿智能正式发布AI得贤招聘官的AI面试官智能体6.3版本:交付替代人类面试官的打分结果
  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • Jenkins + SonarQube 从原理到实战一:基于 K8s 部署与使用(含中文插件与 Python 扫描)
  • 力扣1457. 二叉树中的伪回文路径
  • 力扣面试150(42/150)
  • 旧物回收小程序:科技赋能,让旧物回收焕发生机
  • 软件测试之功能测试
  • 6种将iPhone照片传输到Windows 10电脑的方法