设计模式之模板模式

手把手教你玩转CPU微架构专栏--​​​​第二章:流水线——微架构的“效率引擎”​​​​2.4 超标量与超线程:如何突破“单指令流”的限制? 例如,Intel酷睿i5-13600K拥有6个性能核(P核,支持超线程,共12线程)和8个能效核(E核,无超线程,共8线程),兼顾多线程性能与能效比。通过引入“物理寄存器”替代“逻辑寄存器”(如x86的RAX、RBX),消除数据冒险中的“假依赖”(False Dependency)。引入“混合架构”(Performance Core+Efficient Core),大核(P核)专注高性能任务,小核(E核)处理后台任务;​:6发射超标量,IPC≈3.5(通过3D V-Cache优化缓存,进一步提升效率)。 阅读详情

一、模板模式

定义

    ​    ​模板模式通常又叫模板方法模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式。


适用场景

1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 

2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。

优点

  • 利用模板方法将相同处理逻辑的代码放到抽象父类中,提高代码的复用性

  • 将不同的代码不同的子类中,通过对子类的扩展增加新的行为,提高代码的扩展行

  • 把不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台,符合开闭原则

缺点

 

  • 类的数目增加,每一个抽象类都需要一个子类来实现,这样导致类的个数增加。

  • 类数量的增加,间接的增加了系统实现的复杂度

  • 继承关系自身的缺点,如果父类添加新的抽象方法,所有子类都要改一遍

实例

    ​  利用模板模式重构JDBC操作业务场景,创建一个模板类 JdbcTemplate,封装所有的 JDBC 操作。以查询为例,每次查询的表不同,返回的数据结构也就不一样。我们针对不同的数据,都要封装成不同的实体对象。而每个实体封装的逻辑都是不一样的,但封装前和封装后的处理流程是不变的,因此,我们可以使用模板方法模式来设计这样的业务场景

 

创建约束ORM逻辑的接口

public interface RowMapper<T> {    T mapRow(ResultSet rs,int rowNum) throws Exception;}

 

创建封装所有处理流程的抽象类JdbcTemplate

public abstract class JdbcTemplate {    private DataSource dataSource;​    public JdbcTemplate(DataSource dataSource) {        this.dataSource = dataSource;    }​    public List<?> executeQuery(String sql, RowMapper<?> rowMapper, Object[] values){        try {            //1、获取连接            Connection conn = this.getConnection();            //2、创建语句集            PreparedStatement pstm = this.createPrepareStatement(conn,sql);            //3、执行语句集            ResultSet rs = this.executeQuery(pstm,values);            //4、处理结果集            List<?> result = this.paresResultSet(rs,rowMapper);            //5、关闭结果集            this.closeResultSet(rs);            //6、关闭语句集            this.closeStatement(pstm);            //7、关闭连接            this.closeConnection(conn);            return result;        }catch (Exception e){            e.printStackTrace();        }        return null;    }​    protected void closeConnection(Connection conn) throws Exception {        //数据库连接池,我们不是关闭        conn.close();    }​    protected void closeStatement(PreparedStatement pstm) throws Exception {        pstm.close();    }​    protected void closeResultSet(ResultSet rs) throws Exception {        rs.close();    }​    protected List<?> paresResultSet(ResultSet rs, RowMapper<?> rowMapper) throws Exception {        List<Object> result = new ArrayList<Object>();        int rowNum = 1;        while (rs.next()){            result.add(rowMapper.mapRow(rs,rowNum ++));        }        return result;    }​    protected ResultSet executeQuery(PreparedStatement pstm, Object[] values) throws Exception {        for (int i = 0; i < values.length; i++) {            pstm.setObject(i,values[i]);        }        return pstm.executeQuery();    }​    protected PreparedStatement createPrepareStatement(Connection conn, String sql) throws Exception {        return conn.prepareStatement(sql);    }​    public Connection getConnection() throws Exception {        return this.dataSource.getConnection();    }}

创建实体对象Member类

public class Member {​    private String username;    private String password;    private String nickname;    private int age;    private String addr;​    public String getUsername() {        return username;    }​    public void setUsername(String username) {        this.username = username;    }​    public String getPassword() {        return password;    }​    public void setPassword(String password) {        this.password = password;    }​    public String getNickname() {        return nickname;    }​    public void setNickname(String nickname) {        this.nickname = nickname;    }​    public int getAge() {        return age;    }​    public void setAge(int age) {        this.age = age;    }​    public String getAddr() {        return addr;    }​    public void setAddr(String addr) {        this.addr = addr;    }}​

创建数据库操作类MemberDao

public class MemberDao extends JdbcTemplate {    public MemberDao(DataSource dataSource) {        super(dataSource);    }​    public List<?> selectAll(){        String sql = "select * from t_member";        return super.executeQuery(sql, new RowMapper<Member>() {            public Member mapRow(ResultSet rs, int rowNum) throws Exception {                Member member = new Member();                //字段过多,原型模式                member.setUsername(rs.getString("username"));                member.setPassword(rs.getString("password"));                member.setAge(rs.getInt("age"));                member.setAddr(rs.getString("addr"));                return member;            }        },null);    }}

客户端测试代码

public static void main(String[] args) {        MemberDao memberDao = new MemberDao(null);        List<?> result = memberDao.selectAll();        System.out.println(result);    }

​

SIMULINK开发项目实例 1000 例专栏之第802例--基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真 随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。 阅读详情

相关推荐

SCCM实战指南:从零搭建企业级Windows自动化部署平台

本文提供了一份详细的SCCM实战指南,手把手教你从零搭建企业级Windows自动化部署平台。内容涵盖环境规划、AD架构扩展、SQL Server配置、SCCM主站点安装,以及最终实现操作系统镜像的自动化部署,旨在帮助IT管理员彻底告别手动装机,实现高效、规范的Windows设备批量管理。

weixin_29251337的博客 638

Java中的设计模式

1.什么是设计模式? 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的实验和错误总结出来的。 设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结 2.设计模式的作用是什么? 使用设计模式就是为了重用代码,让代码更容易被他人理解,保证代码可靠性。 3.常见的设计模式 常见的设计模式又23中。 3.1单例模式 ...

weixin_52821030的博客 440

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。本文研究如何利用大语言模型生成分类系统的分析

姚家湾博客 1856

设计模式——模板模式

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

程序猿进阶 3090

LabVIEW调用.so文件的方法

LabVIEW调用.so文件的方法

m0_37878912的博客 3023

EB TRESOS 29.0.0安装教程用于MCAL配置开发

本文介绍的搭建基于NXP官网提供EB软件,进行基于标准AUTOSAR软件底层驱动配置的开发

qq_53260940的博客 1876

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

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

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

哨兵一号数据snap预处理_利用SNAP软件进行Sentinel-1A卫星微波影像的预处理

利用SNAP软件对雷达影像进行预处理,主要包括热噪声去除、轨道文件校正、辐射定标、滤波校正、多普勒地形校正,最终获得入射角和后向散射信息。数据:本次实验所用数据为哨兵一号(Sentinel-1A)干涉宽幅模式(Interferometric Wideswath,IW)下经过多视处理和地距转换的GRD格式产品一般处理流程如下:0 SNAP软件安装软件安装:安装成功后打开SNAP后如图所示:1 数据...

weixin_30000407的博客 1万+

设计模式-模板模式

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

Eistert 2622

32、运算放大器的工作原理与应用

本文详细介绍了运算放大器的工作原理与多种应用场景,涵盖开环与闭环放大器的基本概念、理想运算放大器的特性及其‘黄金规则’。文章深入解析了反相放大器、同相放大器、单位增益跟随器与反相器的配置和增益计算,并探讨了电压比较器及窗口比较器的工作机制。同时提供了运算放大器在实际应用中的选型流程、使用注意事项以及常见故障排查方法,帮助读者全面掌握运算放大器的设计与应用要点。

u5v6w7的博客 163

【OpenCV】第二十四章: 图像特征匹配:暴力特征匹配算法、FLANN特征匹配算法

参数match就是匹配器的匹配结果;参数crossCheck表示交叉检查,意思就是用第一组中的每个描述子和第二组的所有描述子进行匹配完后,再用第二组中的每个描述子和第一组的所有描述子进行匹配,这两步做完后,两步同时找到的相同的匹配对儿就是有效的匹配。方法一:用匹配器的match方法,进行特征匹配:match = bf.match(des1, des2),就是对两幅图的描述子进行计算,返回匹配的结果。匹配的时候是计算两个描述子之间的相似度,然后返回相似度最高的一对儿匹配点,也就是最终的匹配结果。

因为热爱所以坚持 5061

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

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

weixin_39579127的博客 4288

海思3559av100平台lan9500模块调试记录

1. 前言 通过USB2.0接口扩展一路百兆虚拟网口 2. 配置lan9500驱动 make ARCH=arm64 menuconfig 开启LAN95XX驱动,编译进内核 保存内核配置 3. 编译内核 make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- uImage -j 20 cd ../../arm-trusted-firmware/arm-trusted-firmware ./mk.sh cp ...

jzwjzw19900922的博客 908

模板设计模式

模板方法设计模式( Template Method Design Pattern )

学习技术的路上不断沉淀自己 1698

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

Java设计模式之模板模式

Java设计模式之模板模式1. 模板模式概述2. 模板模式实现 1. 模板模式概述 1.模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中定义的方式进行。 2.简单说,模板方法模式定义了一个操作中的算法的核心定义,而将一些步骤迟缓到子类中,模仿子类可以不改变一一个算法的结构,就可以重新定义该算法的部分特定步骤。 3.这些类型的设计模式属于行为型模式。

靖节先生的博客 6057

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式之模板模式详解

摘要: 模板模式是一种行为型设计模式,通过定义算法骨架并将可变步骤延迟到子类实现,实现代码复用和流程控制。适用于算法结构固定但部分步骤可变的场景(如数据处理流程)。核心是"好莱坞原则"——父类控制流程,调用子类方法。实现时需定义抽象类、模板方法和抽象操作,子类填充具体细节。相比策略模式,模板模式更关注算法结构而非完全替换。优点是提高复用性、便于维护,缺点是可能增加类数量。最佳实践包括最小化抽象方法、使用钩子方法、保护模板方法等。合理运用该模式可编写更优雅、易维护的代码。

从不水文,坚持创作,加油 1452

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

设计模式之模板模式(Template Method Design Pattern)

模板模式,全称是模板方法设计模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中是这么定义的:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.翻

xjj1314的专栏 373

设计模式---模板模式(DesignPattern_TemplateMethod)

摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合...

su9257的博客 111

设计模式之模板设计模式

顾名思义,模板设计模式就是将许多公用的常用的代码封装成一个模板,我们只需要实现不同的业务需求的代码,然后和模板组合在一起,那么就得到完整的逻辑。 在我们的日常开发中,常用的模板模式有两种实现方式:继承和接口回调,下面我们就分别使用这两种方式来实现模板设计模式。 假设一个场景:有一段代码如下所示...

chengxuqiu5981的博客 294

设计模式 – 模板设计模式

模板设计模式 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 该模式的主要优点如下。 1) 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。 2) 它在父类中提取了公共的部分代码,便于代码复用。 3) 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的

qq_34125999的博客 2113

JAVA设计模式之模板模式

设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、...

bernardGao94的博客 1754

模板设计模式(Template Design Pattern)

如果说算法,数据结构是编码术的层面,那么设计模式则是编码中的道。 定义 模板设计模式,定义一组算法的框架,这些算法的步骤大致相同。而将这些算法中不同的步骤延迟到子类中实现。 例子 我们在日常生活中使用的料理机时,先将原材料经过初步处理(打豆浆,需要泡豆子;榨果汁,需要提前将水果洗好),然后打开料理机的盖子打开,将原材料放进去,打开料理机开关完成粉碎,然后过滤,得到我们想要的果汁(或豆浆)。将整个...

bajiexu的博客 113

【设计模式】之模板方法模式

今天给大家介绍23种设计模式中的模板方法模式,这个设计模式在Spring框架中还是挺常见的,手写Spring源码的小伙伴必须要掌握的设计模式之一,文章结构还是经典的三连问,是什么?为什么?怎么用?🌈

小杰不秃头的博客 1568

23种设计模式之模板模式

package 二十三种设计模式之模板模式;open();i

2201_75999403的博客 1799
上一篇: 五分钟理解设计模式之代理模式
下一篇: 设计模式之适配器模式
JackRenEngineer
博客等级 码龄10年 37粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值