设计模式(7)-模板方法模式

【Linux命令大全】006.网络通讯之netstat命令(实操篇) 本文详细介绍了Linux系统中netstat网络诊断命令的实用技巧。主要内容包括:1) 基本功能与参数详解,展示如何查看网络连接、路由表和接口统计;2) 安装方法及基础用法,如查看TCP/UDP连接、显示进程信息和路由表;3) 高级应用技巧,包括监听端口检查、连接状态统计和实时监控。文章通过表格和代码示例,系统性地呈现了netstat在系统管理中的核心应用场景,是网络故障排查和性能监控的实用指南。 阅读详情


更多关于设计模式的文章请点击:设计模式之禅(0)-目录页


模板方法模式是23种设计模式中的一种,与其说它是一种设计模式,我更加偏向于认为它是一种设计的思想。

一、模板方法模式的定义

模板方法模式(Template Pattern),一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
在这里插入图片描述

二、模板方法模式的使用

我们又要举动物们的例子了:在动物商店买动物会经过一系列过程:
1、获得动物
2、把动物装起来
3、把动物送给你
这3个步骤可抽取成一个模板方法(Template Method)getAnimals,如以下代码:

public  class AnimalShop {

    //获取动物的模板方法
    public void getAnimals(){
        getAnimal();
        packageAnimal();
        giveAnimal();
    }

   
    public void getAnimal(){//dosomething}

 
    public void packageAnimal(){//dosomething};

     
    public void giveAnimal(){//dosomething};
}

当我们需要有多个不同的动物商店时,我们可以很容易地想到将以上方法抽取出来,使动物商店变成一个超类:

public  abstract class AnimalShop {

    //获取动物的模板方法
    public void getAnimals(){
        getAnimal();
        packageAnimal();
        giveAnimal();
    }

   
    public void getAnimal(){//dosomething}

 
    public void packageAnimal(){//dosomething};

     
    public void giveAnimal(){//dosomething};
}

可是这又有一个问题:子类需要更改模板方法中的两个或三个方法,那应该怎么办呢?

在这里先引出一个概念:方法钩子(Method Hook)
方法钩子可以被理解为在一个超类中默认的方法实现,即子类继承后可自行选择是否去更改它。

所以,我们的动物商店超类可以改写为:

/**
 * @Auther: ARong
 * @Date: 2018/11/30 17:48
 * @Description: 动物商店超类
 */
public abstract class AnimalShop {

    //获取动物的模板方法
    public void getAnimals(){
        getAnimal();
        packageAnimal();
        giveAnimal();
    }

    //getAnimal是钩子方法,可供用户选择是否重写
    public void getAnimal(){
        System.out.println("获得动物");
    }

    //packageAnimal是打包动物抽象方法,由实现类重写
    public abstract void packageAnimal();

    //giveAnimal是打包动物抽象方法,由实现类重写
    public abstract void giveAnimal();
}

这就是一个完备的模板方法模式超类了。接下来我们去继承它:
在这里插入图片描述

  • DogShop
/**
 * @Auther: ARong
 * @Date: 2018/11/30 17:51
 * @Description: 狗狗商店,实现动物商店超类,继承模板方法,重写抽象方法
 */
public class DogShop extends AnimalShop{

    @Override
    public void packageAnimal() {
        System.out.println("将狗狗打包");
    }

    @Override
    public void giveAnimal() {
        System.out.println("将狗狗送出");
    }
}
  • CatShop
/**
 * @Auther: ARong
 * @Date: 2018/11/30 17:54
 * @Description: 小猫商店,实现动物商店超类,继承模板方法,重写抽象方法
 */

public class CatShop extends AnimalShop{


    @Override
    public void getAnimal() {
        //重写钩子方法,修改默认的代码
        System.out.println("重写钩子方法,不要先获得小猫");
    }

    @Override
    public void packageAnimal() {
        System.out.println("将小猫打包");
    }

    @Override
    public void giveAnimal() {
        System.out.println("将小猫送出");
    }
}

  • TestTemplatePattern
/**
 * @Auther: ARong
 * @Date: 2018/11/30 17:56
 * @Description: 模板方法测试
 */
public class TestTemplatePattern {

    @Test
    public void fun1(){
        DogShop dogShop = new DogShop();
        dogShop.getAnimals();
        System.out.println("==================");
        CatShop catShop = new CatShop();
        catShop.getAnimals();
    }
}

测试结果:
在这里插入图片描述

2、OTA/gm - C滤波器的架构与设计 本文深入探讨了OTA/gm-C滤波器的两种主要设计方法:基于LC梯形网络的设计与多环反馈(MLF)结构。前者包括元件替代法和信号模拟法,分别通过电感替代或电路方程模拟实现低敏感度滤波器;后者通过积分器级联与反馈网络合成全极点或含任意传输零点的传递函数。文中详细分析了不同结构如IFLF和LF的反馈矩阵、传递函数及性能差异,指出LF结构在敏感度、噪声和整体性能上的优势。同时比较了各类方法的优缺点及适用场景,为高频连续时间集成电路滤波器的设计提供了系统性指导。 阅读详情

相关推荐

微信小程序测试号开发后上传按钮灰色?三步快速切换正式AppID

本文详细解析了微信小程序测试号开发后上传按钮灰色的原因,并提供了三步快速切换正式AppID的解决方案。通过注册正式小程序账号、修改项目配置和重新编译上传,开发者可以轻松解决上传按钮不可用的问题,确保小程序顺利上线。

weixin_29291185的博客 1578

《设计模式之禅》-模板方法模式

模板方法 定义: 定义一个 操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 模板方法非常简单,仅仅只是使用了继承机制,但是其应用非常的广泛 abstractClass 中的方法分为两类 1.基本方法 基本方法也叫基本操作,是由子类实现的方法,并在模板方法被调用 2.模板方法 可以有一个或者多个,一般是一个...

Minstrel的博客 293

库卡C4控制柜首次上电

本文详细介绍了如何使新购的库卡机器人(以KRC4为例)达到正常运行状态。首先,必须正确连接机器人尾部和控制柜底部的各种线缆,包括动力线缆、编码器线、SmartPad线和安全回路线缆等。特别强调,电源线和蓄电池线的正确连接至关重要,避免硬插以防损坏。此外,机器人与控制柜之间需连接地线以防止漏电。文章还提到,开机前需检查电机保护器开关,并确保所有线路连接正确。开机后,需提升用户权限至安全维护员级别,通过系统配置激活安全相关通讯参数。最后,文章详细解释了X11安全回路的接线方式,强调双通道信号的重要性,并提醒不同

2202_75959322的博客 1845

设计模式之行为模式:模板方法(Template Method)

意图 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Methond使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 ...

北辰思无邪的博客 330

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4145

从RRT到平滑轨迹:机械臂避障规划仿真全流程解析

本文详细解析了机械臂避障规划从RRT算法到平滑轨迹优化的全流程,包括MATLAB实现、碰撞检测工程实践及轨迹平滑优化技巧。通过RRT算法在关节空间的路径搜索与Minimum Jerk/Snap优化,实现机械臂在复杂环境中的高效安全运动,适用于工业自动化与机器人控制领域。

weixin_29051811的博客 295

C语言实现《设计模式之禅》之模板模式

#include #include #include /*C语言实现设计模式之禅  模板模式   类图详见p95*/ #define FALSE  0 #define TRUE   1 typedef int BOOLEAN; /*抽象模板类*/ typedef struct _HummerModel HummerModel; str

chengrile的专栏 727

HFSS线圈仿真避坑指南:从建模到寄生参数分析的完整流程

本文详细介绍了HFSS线圈仿真的完整流程,从精准建模到寄生参数优化,特别针对Ansys Electronics Desktop用户提供实用指南。涵盖线圈几何构建、材料属性配置、端口激励设置及寄生电阻与电感分析等关键步骤,帮助工程师避免常见错误,提升仿真精度与效率。

weixin_29209801的博客 550

设计模式-模板方法模式Template Method(对象行为型)

一、概述 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 AbstractClass叫做抽象模板,它的方法分为两类: (1)原始方法,是由子类实现的方法,并且在模板方法被调用 (2)模板方法,可以有一个或几个,实现对原始方法的调度,完成固定的逻辑 class AbstractClass { public: ...

justkong的博客 374

信捷XDH PLC多轴运动控制实战:Ethercat总线下的C语言封装技巧

本文深入探讨了在信捷XDH PLC平台上,如何利用C语言对EtherCAT总线多轴运动控制进行高效封装。通过设计全局数据池、模块化状态机及用户友好接口,将底层复杂的运动控制函数库抽象为清晰、可复用的高级模块,显著提升程序稳定性与可维护性,并分享了关键的实战避坑经验。

weixin_29188043的博客 160

Python Trimesh库实战:5分钟搞定STL文件解析与3D模型可视化

本文介绍了如何使用Python的Trimesh库快速解析STL文件并进行3D模型可视化。通过简洁的代码示例,演示了从环境搭建、模型加载、几何数据提取到基础变换和批量处理的核心流程,帮助开发者和工程师在5分钟内高效完成3D数据处理与可视化任务。

weixin_32005771的博客 161

设计模式之禅【工厂模式】

真刀实枪之工厂方法模式 从女娲造人开始说起 东汉《风俗通》记录了这样一则神话故事:“开天辟地,未有人民,女娲抟黄土做人。”开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹而洁净的自然环境,寂静而又寂寞,于是女娲决定创造一个新物种,即人类来增加世界的繁荣。 别忘了女娲是神仙,没有办不到的事情,造人的过程是这样的:首先,女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放到大

菜鸟零号 kungfu~peng 551

SAP-MM-采购过账接口(与WMS集成)-代码

1、判断传入值非空检验; 2、判断过账日期是否允许在当前期间; 3、判断是否为集采订单业务,是否审批完成; 4、判断是否发布标准成本发布(此业务场景与价格控制3+S有关) 5、保存日志表; 6、判断业务公司订单审批状态; 7、创建STO交货单、集采公司订单过账、STO公司间创建交货单、交货单过账(两步法)、过账失败回滚(冲销交货、删除交货单、冲销集采入库)

qq_32198063的博客 421

Head First 设计模式 Design Pattern 7-8 Adapter & Facade, Template Method

Section 7 适配器模式和外观模式 Adapter & Facade >客户使用适配器 Client - Request -> Adapter -> TranslateRequest - Adaptee  客户通过目标接口调用适配器的方法发出请求; 适配器使用被适配者的接口把请求转换成被适配者的一个或多个调用接口; 客户收到调用结果, 并不知道是适配器在转化请求 >双向

Fix it 1684

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java中23种设计模式之7-模板方法模式(template method pattern)

定义:模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 以生产手机为例,有一个6寸屏幕手机的模型,其他的手机可以用此模型做衍生品。 在这里,6寸屏幕(screenSize)是固定的,不用重写。而手机...

weixin_34306446的博客 87

蓝牙模块HM-10手册

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

python设计模式【7】-模板方法模式

了解模板方法设计模式 模板方法模式适用于以下场景: 1、当多个算法或类实现类似或相同逻辑的时候 2、在子类中实现算法有助于减少重复代码的时候 3、可以让子类利用覆盖实现行为来定义多个算法的时候 模板方法模式的主要意图: 1、使用基本操作定义算法的框架; 2、重新定义子类的某些操作,而无需修改算法的结构; 3、实现代码重用并避免重复工作 4、利用通用接口或实现 模板方法模式使用以下术语——AbstractClass、ConcreteClass、TemplateMethod和Client;

Rnan_prince的博客 531

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

(7)设计模式之模板方法模式

模板方法模式 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 这个模式就显得特别简单了。 就举个例子吧,在我们考试的时候,除了我们给出的答案可能不相同外,试卷其他地方其实是完全相同的,那么我们就要思考如何把试卷相同的地方进行复用。就把试卷相同的部分看作相同逻辑的代码,把我们的答案看成代码之中的不同。 我们首先就会想到继承,但是如何很好的进行继承呢? 我们要完成某一细节层次一直的一个过程或一系列步骤,但其个别步骤在

m0_55759099的博客 157

设计模式7:模板方法模式

一、我的描述   模板方法模式是将不变的行为搬到超类中,去除子类中重复的代码来体现它的优势,提供了很好的代码复用。   我的理解就是就像是咱们学画画的时候,老师说大家比着这个苹果,然后画一幅自己的苹果,然后大家都在那画,但是大家画出来的都不相同,但是呢我们相同的是我们比照的模式是相同的苹果。   再举个例子:某一次考试,同样的试卷,A得到90分,B得到80分。这次考试相同的是:A和...

bacanpi5506的博客 102

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook

模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override)。 1.CoffeineBeverageWithHook {《HeadFirst设计模式》之模板方法模式 } { 编译工具: Delphi7.0 } { E-Mail : xshlife@163.com } unit uCoffeineBeve

djCode 734

设计模式7——(模板方法模式)

1、定义 模板方法模式(Template Method Pattern):定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式。 2、UML类图 从模型图来看,模板方法模式很简单,但是很常用。抽象模板(AbstractClass)中的方法基本分两类: 基本方法:子类去实现的方法 ,并且在模板方法中被调用。 模板方法:把基本操作方法组合在一起形成一个总算法或一个总行为的方法;一个抽象类可以有任意多个模板

qq_43605227的博客 192

javascript 设计模式(7) —— 模板方法模式

模板方法模式 :在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。

Judy1623 189

设计模式7:模板方法模式

有时候,我们需要定义某个方法,这个方法在高层次来看是相同的,但是里面几个具体步骤有可能有些不同。 一种实现方法是父类定义一个虚方法,由多个子类具体实现。但是这样做的话,不变的和可变的行为在子类中是混合在一起的,造成代码的大量重复。 这时候我们需要使用模板方法模式。 模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构,即可重定义算法的某些...

weixin_30457465的博客 144

设计模式(7)——模板方法模式

模板方法模式 定义一个操作的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 角色扮演 具体子类(RealClass) 由子类实现的方法,并且在模板方法中被调用 抽象模板类(AbstranctClass) 是一个或者多个,一般是一个具体方法/框架,实现对基本方法的调度,来完成固定的业务逻辑 举例说明 现在某明星要开一场演唱会,那...

更与何人说♫ 203

【设计模式】7. 模板方法模式 -封装算法

引子 例如有两个处理逻辑:泡茶、冲咖啡; 他们的基本流程(算法)是相同的:煮开水、冲泡、倒进杯子、加入调料。只不过具体到个别步骤可能有差异。 如果分成两个类来实现,就会存在重复代码。 ——可以将公共的部分(算法)提到父类中;由各个子类实现每个具体步骤。 定义 Define the skeleton of an algorithm in an operation, def

Alpha's 学习笔记 1588

Head First 设计模式笔记 7.模板方法模式

我们之前封装了对象创建,方法调用,复杂接口,鸭子,这一次,我们要封装算法块。 咖啡与茶 在设计中,我们常常会遇到一些方法通用,另外一些方法却不一样的情况。例如现在咖啡店中,茶和咖啡的冲法非常相似。我们看看。 步骤 咖啡冲泡法 茶冲泡法 1 水煮沸 boilWater() 水煮沸 boilWater() 2 沸水冲泡咖啡 brewCoffeeGrinds() 沸水浸泡茶叶 steepTeaBag() 3 咖啡入杯 pourInCup() 茶入杯 pourInCup() 4 加糖和牛

zhazha_hui的博客 181

设计模式(7)-模板方法模式

在微软的WebCast上,李建中老师有个设计模式的系列讲座,其中在讲到模板方法(Template Method)曾说:如果你只想学习一种设计模式就学习模板方法吧。由此可见它使用的广泛性。 今天咱们就来一起学习模板方法模式。   那么,什么是模板方法模式呢?在解决这个问题前,咱们先来看看模板。提到模板,相信大家马上能够想到一些东西,如ppt的模板,报表导出的excel模板,简历的模板等等,呵呵,

wangdeyi1987的专栏 338
上一篇: 设计模式(6)-单例模式
下一篇: 设计模式(8)-迭代器模式
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值