浅谈钩子方法

        何为钩子方法

        钩子方法(Hook methods)是一种在面向对象编程中常用的设计模式,也被称为模板方法模式。在这种模式中,父类定义了一个算法的框架,并且将一些步骤的实现延迟到子类中。子类可以通过重写这些“钩子方法”来改变算法的行为,从而实现定制化。

        钩子方法通常是在父类中声明为虚方法或抽象方法,子类可以选择性地实现这些方法以定制算法的特定部分。父类中的算法框架会在适当的时机调用这些钩子方法,以完成整个算法的执行过程。

        通过使用钩子方法,我们可以实现算法的复用和定制化,同时保持算法的整体结构不变。这种模式有助于降低代码的重复性,提高代码的可维护性和扩展性。

        总的来说,钩子方法是一种让子类影响父类行为的技朧,通过在父类中留出可以被子类扩展的接口,实现算法的定制化和灵活性。

        通俗来说,我们将泡咖啡的制作过程定位一个算法框架,其具体的步骤有:1.烧开水 2.放入咖啡(什么类型的咖啡)或者是 茶叶  3.倒开水 4.加牛奶(可选) 然后在父类中可以实现一个方法,里面包括以上四个步骤,然后将这些步骤可以留给子类去选择重写,实现自定义,例如以下代码

        

abstract class Beverage {public void prepare() {boilWater();addSugarAndCoffee();pourInCup();addCondiments();}public void boilWater() {System.out.println("Boiling water");}public void pourInCup() {System.out.println("Pouring into cup");}// 钩子方法,子类可以选择是否重写abstract void addSugarAndCoffee();// 钩子方法,子类可以选择是否重写abstract void addCondiments();
}class Coffee extends Beverage {@Overridevoid addSugarAndCoffee() {System.out.println("Adding sugar and coffee powder");}@Overridevoid addCondiments() {System.out.println("Adding milk");}
}class Tea extends Beverage {@Overridevoid addSugarAndCoffee() {System.out.println("Adding sugar and tea leaves");}@Overridevoid addCondiments() {System.out.println("Adding lemon");}
}public class Main {public static void main(String[] args) {Beverage coffee = new Coffee();Beverage tea = new Tea();System.out.println("Making coffee:");coffee.prepare();System.out.println("\nMaking tea:");tea.prepare();}
}

总结

        钩子方法(Hook Method)是一种由父类提供的空默认实现的方法,子类可以选择性地重写扩展该方法,以实现特定的行为或定制化逻辑。

        钩子方法可以在父类中被调用,以提供一种可插拔的方式来影响父类的行为。

         钩子方法通常用于框架或模板方法设计模式中。框架提供一个骨架或模板,其中包含一些已经实现的方法及预留的钩子方法。

        具体的子类可以通过重写钩子方法来插入定制逻辑,从而影响父类方法的实现方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[技巧]Arcgis之图斑四至点批量计算

前言 上一篇介绍了arcgis之图斑四至范围计算,这里介绍的图斑四至点的计算及获取,两者之间还是有差异的。 [技巧]Arcgis之图斑四至范围计算 这里说的四至点指的是图斑最东、最西、最南、最北的四个地理位置点坐标,如下图: 四至点…

青山隐隐,败叶萧萧

给定序列需满足二个条件:本身是质数,相邻二项之和仍为质数 首先一个偶数2*n不能通过2*k(k取整数)得到质数。 奇数2*n-12*k2*(nk)-1,可能得到质数 那么若序列中存在偶数,一定不满足第一个条件(特判0,2&am…

STM32进阶笔记——复位、时钟与滴答定时器

本专栏争取每周三更新直到更新完成,期待大家的订阅关注,欢迎互相学习交流。 目录 一、复位1.1 软件复位1.2 低功耗管理复位 二、时钟2.1 系统时钟(SYSCLK)选择2.2 系统时钟初始化 三、滴答定时器(Systick)3.1 SysTick部分寄存器3.…

部署bpmn项目实现activiti流程图的在线绘制

本教程基于centos7.6环境中完成 github开源项目: https://github.com/Yiuman/bpmn-vue-activiti软件:git、docker 1. 下载源代码 git clone https://github.com/Yiuman/bpmn-vue-activiti.git2. 修改Dockerfile文件 声明基础镜像,将项目打包&#xff…

EasyRecovery数据恢复软件有什么优势呢?

EasyRecovery数据恢复软件具有以下优势: 强大的恢复能力:EasyRecovery采用先进的扫描和恢复技术,能够深度扫描存储设备,寻找并恢复因各种原因丢失的数据。无论是误删除、格式化、分区损坏还是病毒感染,它都能提供有效…

设计模式(十一)策略模式

请直接看原文:设计模式(十一)策略模式_某移动支付系统在实现账户资金转入和转出时需要进行身份验证,该系统为用户提供了-CSDN博客 ----------------------------------------------------------------------------------------------------------------…

LeetCode01 - 35.搜索插入位置

一、题目要求 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示…

SpringMVC 学习(十一)之数据校验

目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中,一般会有两种校验数据的方式:客户端校验和服务端校验 客户端校验:这种校验一般是在前端页面使用 JS 代码进行校验,主要是验证输入数据…

文物预防性保护系统方案的需求分析

没有文物保存环境监测,就不能实施有效的文物预防性保护。因此要建立文物预防性保护体系,一定要先有良好的文物状态监测制度,进而进行科学有效的文物保护管理。所以,导入文物预防性保护监测与调控系统,首先就是要针对文物进行全年温度、湿度、光照等关键参…

使用Zint库生成一维码/条形码

下面代码是是使用 Zint 库生成 Code 128 类型的条形码&#xff0c;并将生成的条形码保存为 output.bmp 文件。下面是对代码的详细解释&#xff1a; #include 和 #include <zint.h>&#xff1a;这两行代码包含了所需的头文件&#xff0c;分别是标准输入输出流的头文件和 Z…

LeetCode---【链表的操作】

目录 206反转链表【链表结构基础】21合并两个有序链表【递归】我的答案【错误】自己修改【超出时间限制】在官方那里学到的【然后自己复写,错误】对照官方【自己修改】 160相交链表【未理解题目目的】在b站up那里学到的【然后自己复写,错误】【超出时间限制】对照官方【自己修改…

(C语言)qsort函数模拟实现

前言 我们需先了解qsort函数 qsort函数详解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函数可以排序多种数据类型&#xff0c;很是神奇&#xff0c;这是为什么&#xff0c;我们在里模拟实现这样的功能 目录 1. qsort函数模拟实现 2. 我们使用bubble_sort函数排序整形数…

探究前端的.less样式文件 css的增强版

前言 .less 文件是一种层叠样式表&#xff08;CSS&#xff09;预处理器语言的文件格式&#xff0c;简称 LESS&#xff08;Leaner Style Sheets&#xff09;。它扩展了 CSS 语言&#xff0c;增加了变量、混合、函数和许多其他技术&#xff0c;使得 CSS 更加易于维护和扩展。 与…

AntDesignVue之a-table中key不唯一问题处理的多种方式

AntDesignVue2之a-table中key不唯一问题处理的多种方式 文章目录 AntDesignVue2之a-table中key不唯一问题处理的多种方式1. key不唯一问题1. 问题描述2. 解决方法1. 带冒号的rowKey2 . 带冒号的rowKey绑定表达式3. 不带冒号的rowKey属性 1. key不唯一问题 1. 问题描述 antdv: …

Sunshine v0.21.0 安装卡住,闪退的问题解决

上期博客讲了如何利用 Sunshine 和 Moonlight 实现 iPad 当作 Windows 副屏&#xff0c;用官方 Windows installer 安装 Sunshine 过程中&#xff0c;遇到了安装卡住&#xff08;这个是因为需要国外网络环境&#xff09;&#xff0c;安装后运行闪退的问题。 Sunshine 下载地址…

OpenCV 4基础篇| OpenCV图像的裁切

目录 1. Numpy切片1.1 注意事项1.2 代码示例 2. cv2.selectROI()2.1 语法结构2.2 注意事项2.3 代码示例 3. Pillow.crop3.1 语法结构3.2 注意事项3.3 代码示例 4. 扩展示例&#xff1a;单张大图裁切成多张小图5. 总结 1. Numpy切片 语法结构&#xff1a; retval img[y:yh, x…

以目标检测和分类任务为例理解One-Hot Code

在目标检测和分类任务中&#xff0c;每一个类别都需要一个编码来表示&#xff0c;同时&#xff0c;这个编码会用来计算网络的loss。比如有猫&#xff0c;狗&#xff0c;猪三种动物&#xff0c;这三种动物相互独立&#xff0c;在分类中&#xff0c;将其中任意一种分类为其他都同…

YOLOv9独家原创改进|使用可改变核卷积AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

前端架构: 脚手架通用框架封装之启动检查功能开发(教程四)

脚手架启动前的检查功能开发 接上文&#xff0c;仍旧在 abc-cli 项目中参考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136431320现在要在脚手架启动前要做一些逻辑&#xff0c;可以在 hook 钩子函数中去书写比如&#xff0c;进行node版本的对比&#xff0…

2023年12月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

一、单选题(共15题,共30分) 第1题 现代计算机是指电子计算机,它所基于的是( )体系结构。 A:艾伦图灵 B:冯诺依曼 C:阿塔纳索夫 D:埃克特-莫克利 答案:B 第2题 默认小猫角色,执行下列程序,以下说法正确的是? ( ) A:舞台上会出现无数个小猫 B:舞台只会出现…