模板方法的学习

AMBA总线—APB总线协议详解 文章目录一、APB总线介绍1.1.什么是APB总线1.2.典型的基于 AMBA 总线的系统架构1.3.APB信号列表(重点)二、APB总线传输(时序)2.1.APB 状态机2.2.写操作(重要)2.3.读操作(重要)2.4.APB组件接口(重要)2.4.1.APB Bridge框图2.4.2.APB Slave框图三、APB到AHB的接口3.1.读操作3.2.写操作3.3.读写交替传送 一、APB... 阅读详情

豆浆制作问题

​  1.流程:选材 添加配料 浸泡 放入豆浆机搅碎

​  2.通过添加不同的配料,可以制作不同口味的豆浆

​  3.其中选材、浸泡、放入豆浆机搅碎对于制作每一种口味的豆浆机都是一致的。

​

模板方法模式

​  公开它方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类定义的方式进行。

​  即定义了一个操作中的算法骨架,将一些步骤的实现延迟给子类,使得子类可以在不改变一个算法的结构,便可定义某些特定步骤。

 

模板方法模式结构

在这里插入图片描述

 1.抽象类 (Abstract­Class) 会声明作为算法步骤的方法, 以及依次调用它们的实际模板方法。 算法步骤可以被声明为 抽象类型, 也可以提供一些默认实现。

 2.具体类(ConcreteClass)可以重写所有步骤,但不能重写模板方法本身。

 

模板方法模式适合应用场景

 1.当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。

  2.当多个类的算法除一些细微不同之外几乎完全一样时, 你可使用该模式。 但其后果就是, 只要算法发生变化, 你就可能需要修改所有的类

 

实现方式

  1. 分析目标算法, 确定能否将其分解为多个步骤。 从所有子类的角度出发, 考虑哪些步骤能够通用, 哪些步骤各不相同。
  2. 创建抽象基类并声明一个模板方法和代表算法步骤的一系列抽象方法。 在模板方法中根据算法结构依次调用相应步骤。 可用 final最终修饰模板方法以防止子类对其进行重写。
  3. 虽然可将所有步骤全都设为抽象类型, 但默认实现可能会给部分步骤带来好处, 因为子类无需实现那些方法。
  4. 可考虑在算法的关键步骤之间添加钩子。
  5. 为每个算法变体新建一个具体子类, 它必须实现所有的抽象步骤, 也可以重写部分可选步骤。

 

模板方法模式优缺点

 优点:

  ✔️ 重写一个大型算法中的特定部分, 使得算法其他部分修改对其所造成的影响减小。

  ✔️ 你可将重复代码提取到一个超类中。

 缺点:

  ❌端可能会受到算法框架的限制。

  ❌子类抑制默认步骤实现可能会导致违反_里氏替换原则_。

  ❌方法中的步骤越多, 其维护工作就可能会越困难。

 

解决豆浆制作问题

​ 类图

在这里插入图片描述

​ 代码

public abstract class Soya {

    //模板方法,若不想被子类重写,可添加final
    final void make(){
        select();
        addCondiments();
        soak();
        beat();
    }

    //选材料
    void select(){
        System.out.println("选择了好材料");
    }

    //添加不同的配料,由于不同的豆浆,有不同的配料,于是由子类实重写
    abstract void addCondiments();

    //浸泡
    void soak(){
        System.out.println("将所需材料都浸泡");
    }

    //打碎
    void beat(){
        System.out.println("将所有材料搅碎");
    }
}
//红豆豆浆
public class RedBeanSoya extends Soya {
    @Override
    void addCondiments() {
        System.out.println("添加 红豆");
    }
}

//花生豆浆
public class PeanutSoya extends Soya {

    @Override
    void addCondiments() {
        System.out.println("添加 花生");
    }
}
public class Client {
    public static void main(String[] args) {

        //红豆豆浆
        Soya redBean = new RedBeanSoya();
        redBean.make();

        //花生豆浆
        Soya peanut = new PeanutSoya();
        peanut.make();
    }
}

 注:

​   钩子方法

​     在模板方法模式中,我们可以定义一个方法。它默认不做任何事情,子类则可以依据情况重写,这类方法称为“钩子”

​

eg:

​ 豆浆项目中的纯豆浆

public abstract class Soya {

    //模板方法,若不想被子类重写,可添加final
    final void make(){
        select();
        //若添加材料函数为true,则允许添加材料方法
        if (condimentsIf()){
            addCondiments();
        }
        soak();
        beat();
    }

    //选材料
    void select(){
        System.out.println("选择了好材料");
    }

    //添加不同的配料,由于不同的豆浆,有不同的配料,于是由子类实重写
    abstract void addCondiments();

    //浸泡
    void soak(){
        System.out.println("将所需材料都浸泡");
    }

    //打碎
    void beat(){
        System.out.println("将所有材料搅碎");
    }

    //钩子方法,决定是否添加配料
    boolean condimentsIf(){
        return true;
    }
}
public class PureSoya extends Soya{
    @Override
    void addCondiments() {
        //空实现、即不加材料
    }

    //重写钩子方法,声明不加材料
    @Override
    boolean condimentsIf() {
        return false;
    }
}
public class Client {
    public static void main(String[] args) {

        Soya pure = new PureSoya();
        pure.make();
    }
}

模板方法模式的注意事项和细节

 1.基本思想是:算法只存在于一个地方,也就是在父类中,容易修改。需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修 改
 2.实现了最大化代码复用。父类的模板方法和已实现的某些步骤会被子类继承而直接使用。
 3.既统一了算法,也提供了很大的灵活性。父类的模板方法确保了算法的结构保持不变,同时由子类提供部分步骤的实现。
 4.该模式的不足之处:每一个不同的实现都需要一个子类实现,导致类的个数增加,使得系统更加庞大
 5.一 般模板方法都加上 final 关键字, 防止子类重写模板方法
 6.模板方法模式使用场景:当要完成在某个过程 该过程要执行一系列步骤这一
系列的步骤基本相同 ,但其个别步骤在实现时可能不同,通常考虑用模板方法模式来处理

银河麒麟桌面操作系统V10(SP1)ssh服务安装与配置 在国产化的大背景下,各种国产操作系统逐步进入运维人员的视野,ssh作为linux远程连接工具,是运维人员必需的工具之一。本文主要介绍在银河麒麟桌面操作系统V10(SP1)上安装和配置ssh服务。 阅读详情

相关推荐

C++ 程序稳定运行一段时间后异常中止?vc6 运行库的bug!!!

事件查看器提示:错误应用程序 xxxxxxx.exe,版本 0.0.0.0,错误模块 MSVCRTD.DLL,版本 6.0.9782.0,错误地址 0x00012b40。这是一个通信方面的软件,需要长期运行,在压力测试时,高负荷连续运行一定天数时必定崩溃,而且都是在msvcrtd.dll中崩溃。后来在dump文件中发现调用栈在是MSVCRTD.DLL模块,跟踪代码发现是在void * __cdecl _heap_alloc_dbg(        size_t nSize,        int nBloc

qingflying的专栏 2680

模板方法模式

一、模板方法模式 1、模板方法模式 模板方法(Template Method)模式,又称为模板模式,定义如下: 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。 2、模板方法模式的结构 模板方法模式需要注意抽象类与具体子类之间的协作。 它用到了虚函数的多态性技术以及“不用调用我,让我来调用你”的反向控制技术。 1. 模板方法模式包含以下主要角色: (1)抽象类/抽象模板(Abstract Class) 抽象模

Charge8的博客 8381

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 622

Java设计模式—模板方法模式

  (尊重劳动成果,转载请注明出处:https://blog.youkuaiyun.com/qq_25827845/article/details/51868973冷血之心的博客)   目录 1、定义: 2、通用类图如下: 具体模板: 3、通用代码如下: 抽象模板类: 具体模板类: 场景类: 优点: 缺点: 总结: 模板方法模式仅仅使用了Java的继承机制,但它是一个应用非常广泛的...

冷血之心的博客 1万+

grpc安装与简单demo测试

grpc安装: 由于工作需要,最近在学google的rpc开源框架;由于本人菜鸟一枚,而且是从Windows开发转到Linux;由于之前版本控制使用的是svn,没有使用过git,所以从GitHub上下载代码是通过浏览器下载zip格式的压缩文件,折腾了好几天了,发现了各种坑,各种缺少库,各种不知道怎么把这个库给装机器上。对于一个不熟悉Linux的人来说,这个体验简直糟糕透了。没办法了又在机器上装了...

old__captain的博客 4833

ROS下UR+Realsense相机进行手眼标定

手眼标定主要是用来确定相机坐标系和机械臂坐标系之间的转换关系,从而实现后续的抓取等任务。

weixin_42157689的博客 7573

设计模式之模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它在一个方法中定义了一个算法的骨架,而将一些步骤的实现延迟到子类中。

weixin_44550507的博客 1695

以太网物理层协议整理(2)-万兆以太网

在万兆以太网标准化过程中,IEEE和10GEA(万兆以太网联盟)是两个最重要的组织。 万兆以太网标准和规范都比较繁多,在标准方面,首先有2002年的IEEE 802.3ae,后来也不断有新的万兆以太网规范推出,如2006年的IEEE 802.3an标准(10GBase-T)就推出了基于双绞铜线的万兆以太网规范,同样的IEEE 802.3aq标准推出了基于光纤的10GBase-LRM;2007年的

NowOrNever 3万+

设计模式-模板方法模式(Template Method)

模板方法模式,也被称为模板模式,是一种行为型设计模式。它在一个抽象类中公开定义了执行其方法的模板,规定了算法的骨架。其主要特点是将一些步骤延迟到子类中,这些子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式主要解决了一些通用的方法在每一个子类都重新写了这一问题,其主要目的是将这些通用算法抽象出来。通过使用模板方法模式,子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。

miaoyl的博客 3195

CiteSpace基础操作(CNKI数据的导入分析)(一)

1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索

m0_50990607的博客 5万+

18、改进的LSTM用于污染物浓度预测

本文探讨了改进的长短期记忆网络(MLSTM)在空气污染预测中的应用,重点分析了其对印度泰米尔纳德邦五个城市(金奈、塞勒姆、哥印拜陀、马杜赖和图蒂科林)的PM2.5、PM10、SO2和NO2四种污染物浓度的预测效果。通过与传统LSTM模型的对比实验,结果显示MLSTM在预测准确性和执行效率方面均优于LSTM。研究结果表明,MLSTM在空气质量预测领域具有较高的应用潜力,可为环境保护和空气质量管理提供有力支持。

j0k1l2m3n的博客 175

基于Python学习《Head First设计模式》第八章 模板方法模式

"""咖啡饮料"""print('将水煮沸')print('浸泡或冲泡')print('倒入杯子')print('添加调料')print('浸泡茶叶')print('添加柠檬')print('冲泡咖啡')print('添加奶和糖')(y/n)')print('制作茶...')print('\n制作咖啡...')"""运行结果:制作茶...将水煮沸浸泡茶叶倒入杯子添加柠檬制作咖啡...将水煮沸冲泡咖啡倒入杯子(y/n)y添加奶和糖"""

wzx77的博客 542

麒麟服务器操作系统QT系列软件工具手册

对Qt提供的开发工具进行了一系列的优化之后,在日常的修复bug和维护框架的过程中,桌面研发对Qt的基础软件库也进行了部分优化工作,包括qtbase、qtwayland、qtscript、qt4-x11等Qt基础组件,涉及的Qt框架版本主要涉及到5.9和5.12两个版本。qt 的翻译,是由 ts 文件生成 qm 文件然后进行翻译,国产操作系统上qt 的翻译是由单独的qttranslations包中进行维护,其次部分汉化问题也是qt组件维护工作的一部分,qt的翻译机制如图4-7所示。

太极淘的博客 543

python学习 - 设计模式 - 模板方法模式实例代码

【代码】python学习 - 设计模式 - 模板方法模式实例代码。

weixin_tank88921的博客 280

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

模板方法学习

模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。UML结构图如下: 下面以考试试卷,不同学生选择不同答案来进行举例: 参与角色: 抽象类 具体方法(即重复的方法) 抽象空方法(子类自己实现的方法,子类实现的方法是个性化的) 抽象类: /** * 抽象测试试卷:将子类重复的代码抽取在此,并且把子类中不同的部分抽象成方法,由子类去实现 * @autho

Linging_24的博客 233

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

学习设计模式《十五》——模板方法模式

 模板方法模式的本质是【固定算法骨架】

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1257

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

学习生活要远离它:模板方法模式

Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术.最近频上各大论坛头条的某高校某女生抨击教育事件,让很多人对我国的大中学生的教育普通存在的问题产生共鸣,这些个问题可以很好的阐释这个模式的应用。好了,code is cheap。让代码说话。 类图: 代码如下: Code using System; using System.Data; us...

weixin_34281477的博客 77

模板方法学习资源

大话设计模式:考题抄错会做也白搭——模板方法模式       模板方法:http://terrylee.cnblogs.com/archive/2006/07/04/DesignPattern_TemplateMethod.html

yulan1433096363的专栏 487

模板方法模式学习总结

目录 模板方法模式 引言 定义 模板方法模式结构图 实例 实例描述 代码实现 模式分析 模板方法 基本方法 抽象方法 具体方法 钩子方法 总结 模式优点 模式缺点   模板方法模式 引言 在现实生活中很多事情的完成过程都包含几个基本步骤,例如到请客吃饭,无论吃什么,一般都包含点单、吃东西、买单几个步骤,到底吃什么则具体情况具体分析,在实际环境中再有有户动态决...

江川的博客 672

java学习之设计模式-模板方法模式

设计模式学习,模板模式,来源借鉴黑马设计模式开源视频

qq_47893939的博客 149

像程序员一样思考:解锁高效工作与学习的“模板方法”

在信息爆炸、任务繁杂的今天,我们常常感到无所适从:面对一个全新的工作任务,不知从何下手;想要学习一门新技能,却感觉千头万绪,效率低下。我们渴望拥有一种清晰、高效的方法,能像导航一样指引我们穿越迷雾,直达目标。有趣的是,这种方法可能就隐藏在我们每天打交道的计算机程序设计中。

汪元会的博客 1057

JAVA日常学习034(模板方法模式)

JAVA日常学习之模板方法模式

qq_45889574的博客 140

学习Go语言之模板方法模式

模板方法模式结构图如下。原理是过程实现不一样,但是执行的顺序是按照模板固定好了的。即简单理解为都有1,2,3步骤,但是每一步的实现交由具体实现类不同实现。 1.过程式编程 1 // 模板方法模式 2 package main 3 4 import "fmt" 5 6 type Template interface { 7 fun1() 8 ...

weixin_30571465的博客 207

前端学习笔记202306学习笔记第五十二天-模板方法模式2

前端

qq_41632427的博客 79

学习设计模式之模板方法

模板方法模式 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构图 应用 比如把大象放入冰箱需要3步 打开冰箱门 把大象塞进去 关上冰箱门 代码实现 public class Elephant { public void templateMethod() { // 第一步用打印代替 ...

qq_16830879的博客 163
上一篇: 代理模式的学习
下一篇: 命令模式的学习
code_Floyed
博客等级 码龄7年 3粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值