模板方法模式

embedded/2024/10/18 9:22:48/

1.什么是模板方法模式

      模板方法模式是一种设计模式,用于定义算法的框架结构,将算法中不变的部分封装在父类中, 而将可变的部分延迟到子类中实现。

2.使用场景:

       框架设计:在框架设计中,模板方法模式用于定义算法的骨架,具体的实现细节由子类来实现,以实现定制化功能。

       代码复用:将一些通用的算法步骤抽象到父类中,在子类中只需实现特定的功能,避免重复代码。

       固定流程:当有一组操作需要按照特定的顺序执行时,可以使用模板方法模式确保每个步骤都按照预期顺序执行。

3.示例及代码

       假设我们有一个订单处理系统,其中订单的处理流程包括:验证订单、计算价格、生成订单、发送通知等步骤。我们可以使用模板方法模式来定义订单处理的框架结构,具体的步骤由子类实现。

// 抽象订单处理类
public abstract class OrderProcessor {// 模板方法,定义订单处理流程public void processOrder() {validateOrder();calculatePrice();generateOrder();sendNotification();}protected abstract void validateOrder();protected abstract void calculatePrice();protected abstract void generateOrder();protected abstract void sendNotification();// 新增订单类型的抽象方法protected abstract String getOrderType();
}//线上订单处理
public class OnlineOrderProcessor extends OrderProcessor {@Overrideprotected void validateOrder() {// 在线订单验证逻辑System.out.println("Validating online order...");}@Overrideprotected void calculatePrice() {// 在线订单价格计算逻辑System.out.println("Calculating price for online order...");}@Overrideprotected void generateOrder() {// 在线订单生成逻辑System.out.println("Generating online order...");}@Overrideprotected void sendNotification() {// 发送在线订单通知System.out.println("Sending notification for online order...");}@Overrideprotected String getOrderType() {return "Online Order";}
}//线下订单
public class OfflineOrderProcessor extends OrderProcessor {@Overrideprotected void validateOrder() {// 线下订单验证逻辑System.out.println("Validating offline order...");}@Overrideprotected void calculatePrice() {// 线下订单价格计算逻辑System.out.println("Calculating price for offline order...");}@Overrideprotected void generateOrder() {// 线下订单生成逻辑System.out.println("Generating offline order...");}@Overrideprotected void sendNotification() {// 发送线下订单通知System.out.println("Sending notification for offline order...");}
}//测试
public class Main {public static void main(String[] args) {OrderProcessor onlineOrderProcessor = new OnlineOrderProcessor();onlineOrderProcessor.processOrder();System.out.println("Order Type: " + onlineOrderProcessor.getOrderType());OrderProcessor offlineOrderProcessor = new OfflineOrderProcessor();offlineOrderProcessor.processOrder();System.out.println("Order Type: " + offlineOrderProcessor.getOrderType());}
}@Overrideprotected String getOrderType() {return "Offline Order";}
}


http://www.ppmy.cn/embedded/90427.html

相关文章

使用Chainlit接入通义千问快速实现一个自然语言转sql语言的智能体

文本到 SQL 让我们构建一个简单的应用程序,帮助用户使用自然语言创建 SQL 查询。 最终结果预览 ​ 先决条件 此示例有额外的依赖项。你可以使用以下命令安装它们: pip install chainlit openai​ 导入 应用程序 from openai import AsyncOpenAI…

HarmonyOS多目标产物构建最佳实践

背景 在Android或iOS开发时经常会有打“马甲”包的场景,就是一套代码打出不同主题的包,一个公司的产品可能针对不同用户提供不同的应用,比如抖音有国内版也有国外版,滴滴有个人版还有企业版,同样的在鸿蒙平台也有类似…

ComfyUI: 报EP Error错误(onnxruntime)

🤶背景描述 在使用反推提示词的时候,按照上一篇介绍的方法是可以正常使用的。 但是看后台的时候,发现有一个错误: *************** EP Error *************** EP Error D:\a\_work\1\s\onnxruntime\python\onnxruntime_pybind_s…

”关于“八股文”对程序员开发作用

在程序员开发的语境中,“八股文”通常指的是那些被广泛讨论、反复练习的技术面试问题和答案,这些问题往往围绕经典的技术知识点,如算法、数据结构、设计模式等。对于“八股文”对程序员开发的作用,可以从以下几个方面进行分析&…

Vulnhub入门篇-Kioptrix2014

1.环境配置 下载地址:https://download.vulnhub.com/kioptrix/kiop2014.tar.bz2 攻击机kali:192.168.26.128(Nat模式) 靶机配置:Nat模式 这里注意,根据官网地址说明,需要我们先将网络适配器…

vue2怎么上传文件夹,并展示文件夹内的图片?

我使用的是element-ui组件库,发现el-upload组件并不能满足需求,于是用原生实现一下,这里贴一下关键代码,如果大家有更好的实现方法,欢迎分享!! 实现效果:

打造专业级电子书,一键导出分享

在这个数字化的时代,电子书作为一种传统的视觉传达方式,依然具有独特的魅力和价值。一本高质量、高颜值的电子书不仅能吸引观众的眼球,还能有效传达信息,提升品牌形象。那么,如何制作出一本高颜值的电子书呢&#xff1…

fastjson-流程分析

参考视频:fasfjson反序列化漏洞1-流程分析 分析版本 fastjson1.2.24 JDK 8u65 分析过程 新建Person类 public class Person {private String name;private int age;public Person() {System.out.println("constructor_0");}public Person(String na…