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

设计模式3-模板方法模式

定义

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

通俗理解:父类规定流程,子类去做实现

目的

        ● 代码复用

        ● 定义规范和约束

        ● 模板方法模式不仅仅是一种“复用代码”的技巧,更是一种定义框架、规范行为、实现松耦合的重要设计思想

场景

        ● 营业厅办理业务:取号=》办理业务=》柜台评价、每个人办理的业务不同可能是办卡、可能是转卡、转套餐、办宽带。

        ● 手机组装:装机的流程是固定的,装内部主板=》装电池=》装外壳=》测试手机

        ● 业务分摊:总公司的费用需要分摊到各个子公司

代码

// 模板方式方法-父类规定子类的行为
// 以营业厅办理业务:取号=》办理业务=》柜台评价为例
/*** 抽象模板类 - 定义业务办理流程的骨架*/
abstract class BusinessProcess {// 模板方法:定义了办理业务的固定流程。final防止子类重写整个流程。public final void handle() {takeNumber(); // 1. 取号 (固定步骤)processBusiness(); // 2. 办理业务 (抽象步骤,由子类实现)giveFeedback(); // 3. 评价 (固定步骤)}// 固定步骤1:取号private void takeNumber() {System.out.println(">>> 客户您好,请取号排队... [号码:A" + (int)(Math.random() * 100) + "]");}// 抽象方法:办理业务。留给子类去实现具体的业务逻辑。protected abstract void processBusiness();// 固定步骤3:评价private void giveFeedback() {System.out.println(">>> 业务办理完毕,请对我的服务做出评价(1-5星)。谢谢!");System.out.println("----------------------------------------");}
}/*** 具体子类 - 办理手机卡业务*/
class OpenCardBusiness extends BusinessProcess {@Overrideprotected void processBusiness() {// 实现办理手机卡的特有逻辑System.out.println(">>> 【核心业务】正在为您办理手机卡:");System.out.println("    - 验证身份证信息");System.out.println("    - 选择手机号码");System.out.println("    - 录入个人信息");System.out.println("    - 成功激活SIM卡");}
}/*** 具体子类 - 缴纳话费业务*/
class PayBillBusiness extends BusinessProcess {@Overrideprotected void processBusiness() {// 实现缴纳话费的特有逻辑System.out.println(">>> 【核心业务】正在为您缴纳话费:");System.out.println("    - 查询手机号码欠费金额");System.out.println("    - 接收客户付款");System.out.println("    - 系统充值到账");System.out.println("    - 打印缴费凭证");}
}/*** 客户端/测试类*/
class ClientTest {public static void main(String[] args) {System.out.println("===== 第一位客户:办理手机卡 =====");BusinessProcess openCard = new OpenCardBusiness();openCard.handle(); // 调用模板方法,开始固定流程System.out.println("===== 第二位客户:缴纳话费 =====");BusinessProcess payBill = new PayBillBusiness();payBill.handle(); // 调用模板方法,开始固定流程// 未来新增业务,比如"办理宽带",只需要再创建一个子类即可,无需修改现有流程。}
}

模板方式方法代码

http://www.dtcms.com/a/343208.html

相关文章:

  • 爬虫基础学习-项目实践:每次请求,跟换不同的user-agent
  • 茶饮业内卷破局,从人力管理入手
  • iOS 手势与控件事件冲突解决清单
  • 一本通1342:【例4-1】最短路径问题
  • 【Docker基础】Docker-Compose核心配置文件深度解析:从YAML语法到高级配置
  • 一个状态机如何启动/停止另一个状态机
  • C++ 常见的排序算法详解
  • CPP学习之priority_queue的使用及模拟实现
  • 3维模型导入到3Dmax中的修改色彩简单用法----第二讲
  • Kotlin 中适用集合数据的高阶函数(forEach、map、filter、groudBy、fold、sortedBy)
  • AI客服系统架构与实现:大模型、知识库与多轮对话的最佳实践
  • 蛋白质分析常用数据库2
  • QT开发---QT布局与QSS样式设置
  • 网络打印机自动化部署脚本
  • 工业机器人远程监控与运维物联网解决方案
  • 精准评估新纪元:AI得贤招聘官AI面试智能体6.3,重新定义AI面试
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记与代码示例:Quad-SPl Flash 闪存控制器
  • 深度剖析字节跳动VeOmni框架
  • MySQL索引优化之索引条件字段类型不同
  • POI读和写
  • C2ComponentStore
  • CMOS知识点 MOS管线性区电流公式
  • Linux 网络命令大全
  • 在VSCode中配置.NET项目的tasks.json以实现清理、构建、热重载和发布等操作
  • vue2 watch 用法
  • K8s安全管理与持久化存储实战指南
  • Seaborn数据可视化实战:Seaborn入门-环境搭建与基础操作
  • Seaborn数据可视化实战
  • AI对口型唱演:科技赋能,开启虚拟歌者新篇章
  • 刷机维修进阶教程-----如何清除云账号 修复wifi 指南针 相机 指纹等刷机故障