java 钩子_java中钩子方法的概念
钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:抽象方法(Abstract Method),具体方法(Concrete Method),钩子方法(Hook Method)。
四种方法的基本定义(前提:在抽象类中定义):
(1)抽象方法:由抽象类声明,由具体子类实现,并以abstract关键字进行标识。
(2)具体方法:由抽象类声明并且实现,子类并不实现或者做覆盖操作。其实质就是普遍适用的方法,不需要子类来实现。
(3)钩子方法:由抽象类声明并且实现,子类也可以选择加以扩展。通常抽象类会给出一个空的钩子方法,也就是没有实现的扩展。它和具体方法在代码上没有区别,不过是一种意识的区别;而它和抽象方法有时候也是没有区别的,就是在子类都需要将其实现的时候。而不同的是抽象方法必须实现,而钩子方法可以不识闲。也就是说钩子方法为你在实现某一个抽象类的时候提供了可选项,相当于预先提供了一个默认配置。
(4)模板方法:定义了一个方法,其中定义了整个逻辑的基本骨架。
代码如下:
/**
* 抽象类,定义模板方法和基本方法
*/
abstract class abstractClass{
/**
* 具体方法,声明并实现,继承此抽象类不需实现此方法
*/
public void concreteMethod(){
System.out.print("这是一个具体方法");
}
/**
* 抽象方法,abstract关键字标识,只声明,并不实现,继承此抽象类必须实现此方法
*/
protected abstract void abstractMethod();
/**
* 钩子方法,声明并实现(空实现或者定义相关内容皆可),继承此抽象类的子类可扩展实现或者不实现
*/
public void hookMethod(){
//可定义一个默认操作,或者为空
//System.out.print("此钩子方法有个默认操作")
};
/**
* 模板方法,整个算法的骨架
*/
public void templateMethod(){
abstractMethod();
concreteMethod();
hookMethod();
}
}
public class childClass2 {
public void bond(abstractClass abstractClass){
abstractClass.templateMethod();
}
}
public class Test{
public static void main(String[] args) {
childClass2 childClass2=new childClass2();
childClass2.bond(new abstractClass(){//匿名内部类实现回调
@Override
protected void abstractMethod(){
System.out.print("子类实现父类抽象类中的抽象方法");
}
/**
* 重构钩子方法
*/
//public void hookMethod(){
System.out.print("子类可以在父类钩子方法实现的基础上进行扩展");
}
}
}
java 钩子_java中钩子方法的概念相关推荐
- java 钩子方法_java中钩子方法的概念
钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新 ...
- java监视器_java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)...
在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...
- java 锁_Java之线程并发的各种锁、锁、锁
因为两周没更新了... 也不是懒,这两周确实有些忙,赶项目进度赶的不亦乐乎... 终于赶在工期前,可以进入内测了,我也有了些时间,可以更新啦... 线程并发锁是很常见的问题,而且在Java中锁的类型. ...
- Java反射机制01_反射的概念以及获取字节码信息 的四种方式
Java反射机制01-反射的概念以及获取字节码信息 的四种方式 一.反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象, 都能够调用它的任意 ...
- java中接口文件创建_功能接口简介–在Java 8中重新创建的概念
java中接口文件创建 世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.C ...
- 功能接口简介–在Java 8中重新创建的概念
世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.Comparator,ja ...
- Java中抽象类和接口在概念、语法和应用上的区别和关系
2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...
- 类与方法java讲解_Java中方法使用的深入讲解
方法的使用 1.方法的基本用法 什么是方法,方法就是一个代码片段,类似于c/c++ 语言中的"函数". 1.1方法存在的意义: 是能够模块化的组织代码(当代码规模比较复杂的时候). ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一) 目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronize ...
最新文章
- select报错 spark_使用spark-sql报错 “Metastore contains multiple versions”
- freeglut中提供的几种立体几何对象绘制的android移植
- lucene修改索引——(六)
- 随想(二):简化别人的工作,就是简化自己的工作,节省自己的时间
- C#获取电脑IP、MAC地址示例代码
- C++包扩展_利用 MATLAB Coder 将M代码生成C/C++代码
- java项目在本地部署_jenkins部署java项目在本地(三)
- 2020湖南省技能竞赛获奖名单_2020技能竞赛丨湖南省职业院校技能竞赛我校赛点圆满闭幕...
- Go语言查缺补漏ing Day1
- js在字符串中间插入横线
- 移动流量转赠给好友_移动的号怎么赠送流量给好友?
- 收集一些支付平台(第四方)
- 数组中相同id的其他属性进行拼接的方法
- C++第33课--C++中的字符串类
- vue动画transition
- [spm操作] 什么是mask,如何做mask(未完)
- valgrind小结
- 测试LINUX常用命令全集
- 当“中国制造2025”遇见“德国工业4.0”2016装博会上举行中德论坛
- 51单片机 Proteus仿真 数码管 万年历 电子时钟 阴历阳历 星期 DS1302 修改时间
热门文章
- AAAI2020录用论文汇总(三)
- CNN 与 Transformer 的强强联合!谷歌最新开源 BoTNet,ImageNet 达 84.7%准确率
- 世界杯直播“三分天下”,视频平台如何实现高清直播?
- SpringMVC重定向传参
- TensorFlow 1.9开始支持树莓派
- 简便方法创建自签名证书
- hbase源码系列(九)StoreFile存储格式
- 要学好linux运维请从排版画图开始
- #翻译NO.5# --- Spring Integration Framework
- 请教SQL对日期格式化的写法