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

设计模式 - 模板方法模式

该模式将定义一个操作中的算法骨架,并将算法的一些步骤延迟到子类中实现,使得子类可以在不改变算法结构的情况下重定义算法的某些特定步骤。

例如,炒菜的步骤是固定的,具体可分为倒油、热油、倒蔬菜、倒调料品、翻炒等。通过模板方法模式模拟:

public abstract class AbstractClass {  public final void cookProcess() {  // 固定的炒菜步骤this.pourOil();  this.heatOil();  this.pourVegetable();   this.pourSauce();  this.fry();  }  // 倒油、热油、翻炒 是一样的,在抽象类中直接实现public void pourOil() { System.out.println("倒油"); }  public void heatOil() { System.out.println("热油"); }  public void fry() { System.out.println("翻炒"); }  // 倒蔬菜、倒调料品 取决于蔬菜种类,延迟到子类中实现public abstract void pourVegetable();   public abstract void pourSauce();  
}public class ConcreteClassOfTomato extends AbstractClass { @Override  public void pourVegetable() {  System.out.println("下锅的蔬菜是西红柿");  }  @Override  public void pourSauce() {  System.out.println("下锅的酱料是盐");  }  
}

优点

  1. 提高代码复用

  2. 实现了反向控制,由父类决定整体流程,子类仅提供局部细节的实现,遵守 OCP 开闭原则

缺点

  1. 每当新增一个不同的实现时,都需要定义一个新的子类,导致类个数增加,系统复杂度增加

  2. 反向控制增加了代码阅读的难度

http://www.xdnf.cn/news/8558.html

相关文章:

  • 教育信息化2.0时代下学校网络安全治理:零信任架构的创新实践与应用
  • 《Java vs Go vs C++ vs C:四门编程语言的深度对比》
  • 第十六章:数据治理之数据架构:数据模型和数据流转关系
  • 【R语言科研编程-散点图】
  • C++ STL6大组件
  • mac 安装 mysql 和 mysqlshell
  • (17) 关于工具箱 QToolBox 的一个简单的范例使用,以了解其用法
  • 详解最长公共子序列问题
  • 【每日一题】【前缀和优化】【前/后缀最值】牛客练习赛139 B/C题 大卫的密码 (Hard Version) C++
  • Git研究
  • Anthropic推出Claude Code SDK,强化AI助理与自动化开发整合
  • 微信小程序调试
  • Python实例题:人机对战初体验Python基于Pygame实现四子棋游戏
  • CSS专题之flex: 1常见问题
  • 事务基础概念
  • 抽象类、普通类和接口的区别详细讲解(面试题)
  • Maven 中央仓库操作指南
  • Baklib构建企业CMS高效协作与安全管控体系
  • 开源视频监控前端界面MotionEye
  • Java基础 Day19
  • python web开发-Flask模板引擎Jinja2完全指南
  • AI扫描王APP:高效便捷的手机扫描工具,让生活更智能
  • yum命令常用选项
  • redis使用RDB文件恢复数据
  • 计算机网络学习20250524
  • vs2022 Qt Visual Studio Tools插件设置
  • WPF按钮Radius化
  • DAY01:【ML 第二弹】高等数学
  • Java 函数式接口(Functional Interface)
  • Disruptor—2.并发编程相关简介