设计模式之模版设计模式

西门子S7-1200 PLC与伺服电机控制实战解析 工业自动化控制系统中,PLC(可编程逻辑控制器)与伺服电机的协同工作是实现精密运动控制的核心技术。通过PROFINET工业以太网协议,PLC可以高效地控制多台伺服电机,实现定位、同步和插补等复杂运动。在实际工程应用中,硬件组态的正确配置和运动控制算法的优化是关键挑战。本文以西门子S7-1200 PLC控制五台伺服电机的项目为例,详细介绍了从硬件组态、运动控制程序实现到HMI界面设计的全流程。特别针对多轴同步插补运动、动态速度曲线调整等特殊工艺需求,提供了实用的解决方案和调试技巧,为工业自动化领域的工程师提供 阅读详情

在我们开发中可能会遇到如下问题,例如我们在写代码的时候计算系统的执行时间,现在需求一:计算for循环的执行时间。需求二:计算文件复制的执行时间。需求三:计算代码执行的时间。我们如何在不来回改变代码的情况下来实现这个需求呢?现在模版模式就可以实现这个效果。代码如下:

原始的代码:

1、实例类

public abstract class CalcTime {

public long calcTime() {

long startTime = System.currentTimeMillis() ;
method() ;
long endTime = System.currentTimeMillis() ;

return endTime - startTime ;
}

public void forMethod() {

for(int x = 0 ; x < 10000 ; x++){
System.out.println(x);
}
// // 赋值文件
// BufferedInputStream bis = null ;
// BufferedOutputStream bos = null ;
// 
// try {
// bis = new BufferedInputStream(new FileInputStream("D:\\a.avi")) ;
// bos = new BufferedOutputStream(new FileOutputStream("E:\\a.avi")) ;
// 
// byte[] bytes = new byte[1024] ;
// int len = 0 ;
// while((len = bis.read(bytes)) != -1){
// bos.write(bytes, 0, len) ;
// }
// 
// } catch (Exception e) {
// e.printStackTrace() ;
// } finally {
// 
// // 释放资源
// if(bis != null){
// try {
// bis.close() ;
// } catch (Exception e2) {
// e2.printStackTrace()  ;
// }
// }
// 
// if(bos != null) {
// try {
// bos.close() ;
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// 
// }
 
}

2、测试类

public class CalcTimeDemo {

public static void main(String[] args) {

// 创建对象
CalcTime calcTime = new CalcTime() ;
System.out.println("for循环的执行时间为" + calcTime.calcTime() + "毫秒") ;// for循环的执行时间为566毫秒
System.out.println("复制文件的执行时间为" + calcTime.calcTime() + "毫秒") ;// 复制文件的执行时间为161毫秒

}
}

使用模板模式的改造:

首先我们分析下,每次修改需求的时候都需要在CalcTime 里面改代码,修改method里面的代码:所以我们需要把这个代码抽取出来,写成抽象的让子类去实现。然后再测试了里面之间使用,由于抽象类不能实例化,所以我们需要创建他的实例化对象,有什么需求的话让该类直接继承该类,重写他的抽象方法,然后再测试类里面直接实例化,改造的代码如下:

1、抽象类

/**
 * 模板设计模式
 */
public abstract class CalcTime {

public long calcTime() {

long startTime = System.currentTimeMillis() ;
method() ;
long endTime = System.currentTimeMillis() ;

return endTime - startTime ;
}

public abstract void method() ;
}

2、实例类

for循环继承自抽象类,重写method方法:

public class ForCalc extends CalcTime {
@Override
public void method() {
for(int x = 0 ; x < 10000 ; x++){
System.out.println(x);
}
}
}

计算文件复制事件,继承自抽象类,重写抽象方法:

public class CopyFileCalc extends CalcTime {

@Override
public void method() {

// 赋值文件
BufferedInputStream bis = null ;
BufferedOutputStream bos = null ;

try {
bis = new BufferedInputStream(new FileInputStream("D:\\a.avi")) ;
bos = new BufferedOutputStream(new FileOutputStream("E:\\a.avi")) ;

byte[] bytes = new byte[1024] ;
int len = 0 ;
while((len = bis.read(bytes)) != -1){
bos.write(bytes, 0, len) ;
}

} catch (Exception e) {
e.printStackTrace() ;
} finally {

// 释放资源
if(bis != null){
try {
bis.close() ;
} catch (Exception e2) {
e2.printStackTrace()  ;
}
}

if(bos != null) {
try {
bos.close() ;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

测试类:

public class CalcTimeDemo {

public static void main(String[] args) {

ForCalc calc = new ForCalc() ;
System.out.println("for循环的执行时间为" + calc.calcTime() + "毫秒");// for循环的执行时间为377毫秒

CopyFileCalc copyFileCalc = new CopyFileCalc() ;
System.out.println("复制文件的执行时间为" +copyFileCalc.calcTime()+ "毫秒");// 复制文件的执行时间为196毫秒
}
}
别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码) 本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。 阅读详情

相关推荐

ComfyUI节点流实战:用Wan2.1制作电商短视频全流程(附人物/商品模板)

本文提供了一份详尽的ComfyUI实战教程,指导用户如何利用通义万相Wan2.1图生视频模型,高效制作适用于抖音等平台的电商短视频。内容涵盖从环境部署、核心工作流搭建,到针对服装、3C数码等品类的高级提示词模板与参数调优,旨在帮助电商从业者快速生成高质量、高保真商品展示视频,显著提升内容生产效率。

potato的博客 1279

设计模式第15讲——模板模式(Template)

模板模式是一种基于继承实现的设计模式,它是行为型的模式。一、什么是模板模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 UML类图5.1 OrderFood——抽象类(Abstract)5.2 具体类(Concrete Class)5.3 testTemplate六、总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 9108

GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图

本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。

weixin_27966471的博客 425

模板设计模式

模板方法设计模式 一、模板方法设计模式 1、介绍 (1)模板方法设计模式(Template Method Pattern),也叫模板模式(Template Pattern)。在一个抽象类公开定义了执行它的方法模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 (2)模板方法设计模式就是定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。 (3)模板方法设计模式属于行为型模式。 2、UML 抽象类A:类中实现了模板

大树 2099

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 234

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 294

模板设计模式_23种设计模式之模板设计模式

基本介绍1.模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的模板。它的子类可以俺需要重写方法实现,但调用将以抽象类中定义的方式进行;2.简单说,模板方法模式定义一个操作中的算法的骨架,而降一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤;3.这些类型的设...

weixin_39579127的博客 4288

三菱 FX5U PLC 4轴程序 控制松下伺服3个, 步进电机一个

三菱 FX5U PLC 4轴程序。 控制松下伺服3个, 步进电机一个, 四轴自动堆垛码垛设备程序, 回原点动作用专用的原点回归指令写的, 手动运行用三菱相对定位指令写的 , 自动运行用绝对定位指令写的取料运行, 表格定位写的自动放料运行, 设备各种报警异常都有写出 程序每一步都有注释。 包括PLC程序、显控触摸屏 程序、松下伺服驱动器接线图。 程序内都有IO注释 编号:4816635519484681汇美0808 ...

m0_68069172的博客 3381

设计模式-模板模式

我们再学习另外一种行为型设计模式,模板模式。我们多次强调,绝大部分设计模式的原理和实现,都非常简单,难的是掌握应用场景,搞清楚能解决什么问题。模板模式也不例外。模板模式主要是用来解决复用和扩展两个问题。我们今天会结合 Java Servlet、JUnit TestCase、Java InputStream、Java AbstractList 四个例子来具体讲解这两个作用。 模板模式的原理和实现 模板模式,全称是模板方法设计模式,英文是 Template Method Design Pattern。在 GoF

Eistert 2622

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

PPT里全是文字且很拥挤怎么办?本篇教你使用7种不同的排版让你的PPT瞬间变得高大上起来。

打造全国最全的AI Agent开发知识领域的博客 5021

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc)

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc)

weixin_43567873的博客 296

设计模式——模板模式

在面向对象程序设计过程中,程序员常常会遇到如下情况:设计一个系统时知道算法所需的关键步骤,且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如:去医院看病一般都要经历以下流程:挂号、排队、就诊、取药等,其中挂号和排队对每个客户都是一样的,可以在父类中实现,但是就诊和取药是因人而异的。可以延迟到子类中实现。我们把这些规定了流程或格式的实例定义成模板,允许使用者根据自己的需求去更新它。 一、模板模式的基本介绍 1)、模板方法模式(Template Meth.

程序猿进阶 3090

Transformer实战——Transformer自编码模型

自编码模型依赖于原始 Transformer 编码器,并且在解决分类问题时非常高效。除了 BERT 外,还有许多流行的自编码模型,在本节中,我们将一些除 BERT 外的自编码模型,这些模型的目标是通过优化预训练过程、增加层数或头数、改善数据质量、设计更好的目标函数等,来在下游任务上取得更好的表现。这些改进大致可以分为两个方面,更好的架构设计选择和预训练控制。

盼小辉丶的博客 9305

模版方法设计模式

模版方法设计模式 未使用模板方法设计模式 首先看一个不使用模版方法设计模式的几个类 可以将Student类和Worker类中的day()方法内的代码看作是算法,可以发现,Student类和Worker类的算法相同,不同的只是算法的每一个步骤的具体实现细节。 两个类中的算法相同,每个类也都要写一遍,代码冗余,而且修改算法步骤也不方便 public class Student { /**/ public void day(){ System.out.println("学生起床")

芒果小洛 204

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

设计模式——模版方法设计模式(行为型)

模版方法设计模式是一种行为型设计模式,定义了算法的步骤顺序和整体结构,将某些步骤的具体实现延迟到子类中。它通过抽象类定义模板方法,子类实现抽象步骤,实现代码复用和算法流程控制。该模式适用于有固定流程但部分步骤可变的场景,如业务流程控制等。

庄小焱 1495

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

设计模式模版方法

概述 模版方法就是定义一个算法的骨架,将骨架中的特定步骤延迟到子类中。模板方法模式使得子类可以不改变算法的结构即可重新定义(重写)该算法的某些特定步骤。 优缺点 优点 解决了代码的重复问题 提高了代码的可扩展性 规定了代码的执行流程 缺点 每增加一个实现,必须增加一个子类 例子 中国的伟大在于五千年的历史,诞生了属于自己的医学体系,时至今日,人们看病可以选择中医和西医,两者的去医院看病的大概流程是一致的,但是诊断方法并不同,通过代码形式展现出来。 挂号→诊断→缴费→取药 抽象模版 /** * @a

qq_38306425的博客 557

模版模式 设计模式

**case "Simlpe" : //可以利用一些获取Bean的工具获取, 避免new //SpringApplicationUtil.getBean(SimlpeOrder.class);} } /*** 检查参数/*** 获取商品/*** 扣减库存/*** 扣减积分/*** 保存订单/*** 执行模版/**

预立数据科技 1159

设计模式——模版模式

模版模式通过一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。核心思想定义一个算法的骨架,将一些步骤延迟到子类中实现。模版模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。

thbook的博客 721

设计模式了解哪些,模版模式

假设我们有一个图像处理的框架,其中包含了一些基本的图像处理算法,例如加载图片、处理图片、保存图片等。具体的咖啡种类(EspressoCoffee和LatteCoffee)继承了抽象模版,并实现了具体的冲泡和添加调料的方法。模版模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中。定义了处理Web请求的流程,包括解析请求、验证请求、处理请求和渲染视图。,其中包含了加载图片、应用滤镜和保存图片的算法框架。)继承了这个框架,并实现了自己的加载、处理和保存逻辑。,并实现了自己的处理逻辑。

jakelihua 450

设计模式之模版模式

模版模式是我最喜欢的一个设计模式,也是最早尝试使用过的一个设计模式。根据《大话设计模式》中的描述: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 很关键的一点是算法,或者说函数的整体流程是不变的,但是部分流程是可变的、可扩展的,交由子类去实现。 举一个简单的例子,比如考试,在系统中的流程是: 系统创建考试 -&g...

【欢迎关注公众号:冬瓜白】 552

【设计模式-行为型】模版方法模式

今天爸爸在看电视没有烟抽了,也快吃饭了没有酒喝了。这个时候 爸爸把你叫过来,来给你30块钱,你给我去买个烟,在买个酒, 剩下的钱你自己支配。这个例子就是模板方法模式,它通过在抽象类中定义一个算法的骨架,将一些步骤延迟到子类中实现,从而在不改变算法结构的情况下,允许子类重新定义算法中的某些步骤。在这个例子中,爸爸给你30块钱,让你去买烟和酒,剩下的钱你自己支配。爸爸定义了任务的总体步骤(买烟、买酒、处理剩余钱),这些步骤的顺序是固定的,但具体的购买细节(如烟和酒的价格)由你(子类)来实现。

qq_36038282的博客 887

设计模式-模版方法

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些步骤。Template Method模式是一种非常基础的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Templater Method的典型应用。

Lenn Louis' Scribe 1110

设计模式之模版方法

一、模版方法:所有处理的请求流程都一样,只有流程中某些较少的地方不一样,可以考虑使用模版方法。 比如我们每天上班,都是 起床、上班、下班、睡觉的流程。那么可以使用模版方法。 模板方法UML图: 二、模版方法实现代码: public abstract class TemplateClassAbstract { public void getUp(){ Syste...

张云生的博客 212

Golang 模版设计模式(二十三)

github:https://github.com/zhumengyifang/GolangDesignPatterns 上一篇:https://blog.youkuaiyun.com/weixin_40165163/article/details/91128342 模版设计模式 在模版模式中,一个抽象类公开定义了执行它的方法的方式、模版。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行...

王佳宇的个人博客 7203

设计模式 - 模版方法

设计模式 - 模版方法 场景 小张的团队最近接受一个需求,实现实现一家咖啡店的冲泡咖啡和茶的冲泡自动化。之前这家咖啡店都是由咖啡师傅手动进行调制咖啡和茶。现在咖啡店需要引入自动化的点单和调制饮料的系统,小张负责实现调制饮料的功能。 咖啡师傅手工冲泡咖啡和茶的流程: 冲泡咖啡: 把水煮沸 用沸水冲泡咖啡 把咖啡倒入杯子 加糖和牛奶 冲泡茶: 把水煮沸 用沸水冲泡茶叶 把茶倒入杯子 加柠檬 小张先简单...

u014033218的专栏 190

设计模式之禅(三):模版方法模式,介绍+demo+HttpServlet中的模版方法运用

Template Method Pattern is a behavioral design pattern that defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps of the algorithm without changing its structure.

人在江湖 1116

Java设计模式_模版方法设计模式

1.模版方法设计模式:在父类的一个方法中定义一个总体算法骨架(算法模板),而将一些步骤延迟到子类中,因为不同的子类实现细节不同,模板方法可以使得子类不改变算法结构的情况下,重新定义算法中的某些步骤。 抽象父类至少提供的方法 模板方法:一种通用的处理方式,即模板 抽象方法:一种具体的业务实现,有子类完成 注意:抽象父类提供的模板方法只是定义了一个通用算法,其实现必须依赖子类的辅助 pa...

weixin_45460315的博客 209
上一篇: 设计模式之装饰者模式
下一篇: SVN服务器和客户端的配置
一杯清泉
博客等级 码龄11年 314粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值