当前位置: 首页 > news >正文

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

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法骨架,将一些步骤的具体实现延迟到子类中。模板方法模式通过将共同的代码逻辑放在父类中,而将具体的实现细节留给子类来实现,从而实现代码的复用和扩展。

在模板方法模式中,有两类角色:

  1. 抽象类(Abstract Class):抽象类定义了算法的骨架,其中包含了一系列的抽象方法和具体方法。抽象类中的具体方法可以是抽象方法的默认实现,也可以是一些通用的步骤实现。抽象类中的模板方法用于定义算法的骨架,它调用抽象方法和具体方法来完成算法的执行。
  2. 具体类(Concrete Class):具体类是抽象类的子类,它实现了抽象类中定义的抽象方法,完成具体的实现细节。

下面是一个示例,展示了模板方法模式的应用:

// 抽象类
abstract class AbstractClass {// 模板方法public void templateMethod() {step1();step2();step3();}// 抽象方法,由子类实现protected abstract void step1();// 具体方法,提供默认实现protected void step2() {System.out.println("AbstractClass: Step 2");}// 抽象方法,由子类实现protected abstract void step3();
}// 具体类
class ConcreteClass extends AbstractClass {@Overrideprotected void step1() {System.out.println("ConcreteClass: Step 1");}@Overrideprotected void step3() {System.out.println("ConcreteClass: Step 3");}
}// 客户端代码
public class Main {public static void main(String[] args) {AbstractClass abstractClass = new ConcreteClass();abstractClass.templateMethod();}
}

在上面的示例中,AbstractClass 是抽象类,定义了一个模板方法 templateMethod(),它定义了算法的骨架,并调用了抽象方法 step1()step3(),以及具体方法 step2()ConcreteClass 是具体类,它继承了 AbstractClass 并实现了抽象方法 step1()step3()。在客户端代码中,创建了一个 ConcreteClass 的实例,并调用了模板方法 templateMethod(),从而完成了算法的执行。

运行上述代码,将会输出以下结果:

ConcreteClass: Step 1
AbstractClass: Step 2
ConcreteClass: Step 3

通过模板方法模式,我们可以将算法的通用部分放在抽象类中,而将具体的实现细节留给子类来实现。这样可以实现代码的复用和扩展,同时还可以避免子类中的代码重复。

http://www.lryc.cn/news/188631.html

相关文章:

  • MinIO的安装与使用
  • “==”和equals的区别
  • QT - 对话框去掉标题栏问号
  • FPGA---UDP通信求助
  • RxJava介绍及基本原理
  • nginx目录穿越
  • stl String
  • java通过ffmpeg将wav音频文件转广播音频编码-G.711文件发送
  • 【Spring】Springmvc执行流程
  • 游戏软件开发与应用软件开发有什么不同呢?
  • 绥化市中心广场焕发新活力:OLED透明拼接屏的奇观展示
  • JavaScript(CSS)动画引擎汇总
  • 第九章-线程
  • UI设计师岗位的基本职责八篇
  • 【了解一下,单例模式的实现方法--Java】
  • C++实现enum反射,类似magic_enum,支持enum classes
  • 机器学习与模式识别作业----决策树属性划分计算
  • 爬虫破解:解决CSRF-Token反爬问题 - 上海市发展和改革委员会
  • 网络代理技术的威力:保障安全、保护隐私
  • 【STM32 中断】
  • TensorFlow入门(十二、分布式训练)
  • 在React中,什么是props(属性)?如何向组件传递props?
  • java 每种设计模式的作用,与应用场景
  • Appium问题及解决:打开Appium可视化界面,点击搜索按钮,提示inspectormoved
  • android 不同进程之间数据传递
  • 一个完整的初学者指南Django-part1
  • SpringBoot和Hibernate——如何提高数据库性能
  • 五分钟Win11安装安卓(Android)子系统
  • 基于LSTM-Adaboost的电力负荷预测的MATLAB程序
  • GLTF纹理贴图工具让模型更逼真