设计模式(三)、模板方法设计模式

server/2024/10/18 0:54:50/

模式定义

模板方法模式(Template Method Pattern):定义一个操作中算法的框架而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

模式结构

模板方法模式包含如下角色:
AbstractClass: 抽象类
ConcreteClass:具体子类

模式分析

  1. 是一种基于继承的代码复用技术

  2. 将一些复杂流程的实现步骤封装在一系列基本方法中

  3. 在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果

方法分类

  • 模板方法(Template Method)

  • 基本方法(Primitive Method)

    • 抽象方法(Abstract Method)

    • 具体方法(Concrete Method)

    • 钩子方法(Hook Method)

      • (1)“挂钩”方法:isXXX()或hasXXX(),返回类型为boolean类型
      • (2)空方法

                   代码示例:

java">//模板方法
public void template(){open();display();
//通过钩子方法来确定某一步骤是否执行
if(isPrint()){print();}
}
//钩子方法
public boolean isPrint() {return true;
}

模板方法模式的优点

  1. 在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细的处理算法时并不会改变算法中步骤的执行次序
  2. 提取了类库中的公共行为,将公共行为放在父类中,而通过其子类来实现不同的行为
  3. 可实现一种反向控制结构,通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行
  4. 更换和增加新的子类很方便,符合单一职责原则和开闭原则

模板方法模式的缺点

需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统会更加庞大,设计也更加抽象

模板方法模式使用场景 

  1. 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现
  2. 各子类中公共的行为应被提取出来,并集中到一个公共父类中,以避免代码重复
  3. 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制 

模板方法模式和继承有什么区别 

  • 模板方法设计模式更注重于算法的骨架和步骤的延迟实现,而继承则侧重于类与类之间的关系以及属性和方法的继承。
  • 模板方法设计模式是在算法层面上进行复用和扩展,而继承则是在类层面上进行复用和扩展。
  • 模板方法设计模式通常需要定义抽象类和具体实现类,而继承则是通过子类继承父类来实现。 

模板方法设计模式和策略模式的差异会放到策略模式的文章中 

因为项目架构优化,部分算法实现用到了模板方法设计模式,写了这个文章。如有错误或需要调整的地方请留言。 


http://www.ppmy.cn/server/25555.html

相关文章

随手记:vue2 filters this指向undefined

今天在使用filters的时候,需要用到this的数据,结果发现,this打印出来的是undefined 原因: 过滤器注册在vue实例之前,所以this指向了window,但是因为严格模式原因,为 undefined; 所以需要全局声…

Java后端如何生成二维码

为节约服务器资源,一般情况下,不要直接生成海量二维码。 可以考虑,前缀字符,自定义规则生成二维码。 支持自定义二维码大小、二维码logo、颜色等等 前端生成二维码 详见前端开发手册 附件:代码文件下载 ​​http…

K8S 哲学 - deployment -- kubectl【create 、 rollout 、edit、scale、set】

kubectl create kubectl rollout kubectl edit kubectl set kubectl scale 1、创建与配置文件解析 2、deploy 滚动更新 :template 里面的内容改变触发滚动更新 编辑该 deploy 的 配置文件 ,加入一个 label 不会触发滚动更新 改变 nginx镜…

(iFlyCode、FREEGPT、Copilot、AIPlus、稳定高效)分享好用的ChatGPT

目录 1、iFlyCode 2、FREEGPT 3、Microsoft Copilot: 你的日常 AI 助手 4、AIPlus

Photoshop 2024 25.4蓝猫版_支持参数滤波器和Ai神经滤镜

网盘下载 Photoshop 2024 (Beta) 蓝猫版v25.4.0(2426)全新功能:支持参数滤波器和AI神经滤镜。 最新的PS 25.4 Beta版新增了参数滤波器(Parametric Filters)功能,而正式版的PS 2024还没有这个功能,只有Beta版才有&…

鸿蒙南向开发环境的搭建(OpenHarmony)

在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual StudioCode进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此&…

第6节:UIOTOS前端零代码应用 蓝图连线+嵌套封装 实现MQTT数据前端曲线滚动 小示例06

目标 通过连线嵌套封装,实现MQTT数据前端曲线滚动 最终效果 实现过程 步骤1:接15节,选中嵌套容器信号值双击依次进入到底图 步骤2:拖入输入框和API组件,设置其属性 步骤3:打开MQTT设置其属性 步骤4&…

Matlab|交直流混合配电网潮流计算(统一求解法)

目录 1 主要内容 算例模型 统一求解法迭代方程 算法流程图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序为matlab代码,采用统一求解法对交直流混合配电网进行潮流计算,统一迭代法又称统一求解法,其思路是将混联系统中的交流网…