java设计模式(十四)模板方法

news/2024/11/6 14:32:32/

目录

  • 定义
  • 模式结构
  • 角色职责
  • 代码实现
  • 适用场景
  • 优缺点

定义

模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说, 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。

模式结构

在这里插入图片描述

角色职责

1.AbstractClass: 抽象类。用来定义算法框架和抽象操作,具体的子类通过重定义这些抽象操作来实现一个算法的各个步骤。在这类里面,还可以提供算法中通用的实现。
2.ConcreteClass: 具体实现类。用来实现算法框架中的某些步骤,完成与特定子类相关的功能。

代码实现

抽象类:

abstract class AbstractClass {// 模板方法public void TemplateMethod(){SpecificMethod();abstractMethod1();abstractMethod2();}// 具体方法public void SpecificMethod(){System.out.println("抽象类中的具体方法被调用");}// 抽象方法1public abstract void abstractMethod1();// 抽象方法2public abstract void abstractMethod2();}

具体实现:

public class ConcreteClass extends AbstractClass {@Overridepublic void abstractMethod1() {System.out.println("抽象方法1的实现被调用。");}@Overridepublic void abstractMethod2() {System.out.println("抽象方法2的方法被调用。");}
}

测试方法:

public class TemplateMethodPattern {public static void main(String[] args) {AbstractClass tm = new ConcreteClass();tm.TemplateMethod();}
}

输出结果:

抽象类中的具体方法被调用
抽象方法1的实现被调用。
抽象方法2的方法被调用。

适用场景

1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2.各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。

优缺点

优点:
1.封装不变部分,扩展可变部分,把认为是不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展。
2.提取公共部分代码,便于维护
3.行为由父类控制,子类实现,基本方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开-闭原则。
缺点:
1.对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度。
2.父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它降低了代码的可阅读性。
3.由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍。
在这里插入图片描述


http://www.ppmy.cn/news/254369.html

相关文章

【android】反编译工具以及使用方式分步骤描述

以下是对常见 Android 反编译工具的使用方式分步骤描述: Apktool 的使用方式: 步骤一:下载并安装 Apktool,可以从官方网站(https://ibotpeaches.github.io/Apktool/)下载最新版本的 Apktool。 步骤二&am…

$2$驱动模块

目录 1.驱动模块(驱动程序的框架) 2.内核中的打印函数(编写第一个驱动程序) Source Insight 使用: 打印函数编写 分析 3.驱动的多文件编译 4.模块传递参数 安装好驱动之后如何传参? 多驱动之间调用…

用anaconda3安装tensorflow的gpu版(显卡是gtx770,操作系统是window7,cuda9.0,cudnn9.0-v7.2)

虽然快毕业了,但是还是想玩玩深度学习,搞了块gtx770随便玩一下。 1.官网下载最新版的anaconda3 2.下载cuda9.0 (之前一直在纠结是否需要vs,问过朋友之后,表示其实不需要。可能需要一些特殊功能的时候需要,这个以后碰…

最新CPU、显卡性能天梯图

最新最全版: 台式CPU性能天梯图 台式显卡性能天梯图 笔记本CPU性能天梯图 笔记本显卡性能天梯图

计算机桌面性能3.3,显卡天梯图2018年3月最新版 三月桌面显卡性能排行 (全文)

伴随着AMD八代APU、NVIDIA网吧特供GTX1060 5G吃鸡显卡上市,新一期的显卡天梯图2018年3月版又与大家见面了。由于近段时间NVIDIA和AMD并没有上市新显卡,因此三月桌面显卡天梯图相比一月版变化也不大,仅供参考吧。 显卡天梯图2018年3月最新版 显…

【分享】2010最新笔记本显卡性能排名总表

以下排名整理自国外网站,以性能排名,越往前性能越好 第一梯队:高端显卡 GeForce GTX 280M SLI Mobility Radeon HD 4870 X2 GeForce GTX 260M SLI GeForce 9800M GTX SLI GeForce GTX 280M GeForce 9800M GT SLI GeForce 9800M GTS SLI Mobil…

08年最新笔记本显卡性能排名和档次划分

08年笔记本显卡性能排名和档次划分注意:类别排名越后,性能越低。第一类笔记本显卡排名: GeForce 8800M GTX SLI GeForce Go 7950 GTX SLI GeForce Go 7900 GTX SLI Quadro FX 3600M GeForce 8800M GTX GeForce Go 7950 GTX Quadro FX 3500M G…

闲话 - 笔记本显卡性能排行

第一梯队:高端显卡GeForce GTX 280M SLIMobility Radeon HD 4870 X2GeForce GTX 260M SLIGeForce 9800M GTX SLIGeForce GTX 280MGeForce 9800M GT SLIGeForce 9800M GTS SLIMobility Radeon HD 3870 X2GeForce 8800M GTX SLIMobility Radeon HD 3850 X2Quadro FX 3…