03-JAVA设计模式-模板方法模式

模板方法模式

什么是模板方法

模板方法模式(Template Method Pattern)在Java中是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

模板方法模式的结构

  • 抽象类(Abstract Class):
    • 定义了一个或多个抽象操作。
    • 定义了一个模板方法,它调用了这些抽象操作。
  • 具体子类(Concrete Subclass):
    • 实现抽象类中定义的抽象操作。
    • 继承抽象类并可以调用模板方法以执行算法。

优点:

  • 代码复用:模板方法定义了算法的骨架,因此相同的代码不需要在多个地方重复编写。
  • 算法结构清晰:通过将算法分解为一系列步骤,模板方法使得算法结构清晰,易于理解。
  • 扩展性:子类可以通过实现不同的抽象操作来扩展算法的行为,而无需改变算法的整体结构。
  • 灵活性:模板方法模式允许在算法的不同部分之间进行灵活的组合。

缺点:

  • 子类数量增加:如果算法中的步骤很多,并且它们都可能被子类覆盖,那么可能会导致子类数量急剧增加,从而增加系统的复杂性。
  • 不易于进行大的变动:如果模板方法中的某个步骤不适合作为抽象方法,那么就无法通过子类来修改它,这可能会限制算法的灵活性。
  • 可能导致违反开闭原则:如果抽象类定义得不够稳定,经常需要修改,那么每次修改都可能影响到所有的子类。

案例

在银行办理业务时,一般通过取号-> 办理业务 -> 评价,通过模板方法实现银行办理不同业务

UML

在这里插入图片描述

实现步骤:

  • 定义银行办理业务类,类中定义通用的final方法(不允许子类覆盖),对外调用的处理方法,以及变化的抽象方法接口
  • 定义不同的业务实现,通过继承实现变化的抽象方法接口

实现代码

Business.java

// 业务
public abstract class Business {public final void offerNumber(){System.out.println("取号");}// 办理业务抽象方法public abstract void handleBsiness();public final void evaluate(){System.out.println("评价");}public final void handle(){offerNumber();handleBsiness();evaluate();}
}

EnterpriseBusiness.java

// 企业业务
public class EnterpriseBusiness extends Business{@Overridepublic void handleBsiness() {System.out.println("办理企业业务");}
}

PersonalBusiness.java

// 个人业务
public class PersonalBusiness extends Business{@Overridepublic void handleBsiness() {System.out.println("办理个人业务");}
}

TestClient.java

public class TestClient {public static void main(String[] args) {Business business = new PersonalBusiness();business.handle();}
}

执行结果:

在这里插入图片描述

gitee源码

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git

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

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

相关文章

AI文章写作网站

最强AI文章写作网站——心语流光( Super Ai Writer ) 特点 多轮问答写作,自动携带历史记录进行问答可以自定义携带历史记录的轮数,为0则携带全部历史记录,有效避免token浪费(类似coze平台)AI生…

线上社交app的搭建,圈子社交系统,小程序+app+H5三端,源码交付,支持二开!

在科技飞速发展的大背景下,年轻人社交不再局限于面对面,线上社交app已深入各大年轻人的手机中。相比于传统交友方式,线上社交app为用户提供了更加新奇的交友体验。同时,它还可以吸引更多的朋友,提高用户的整体交友体验…

54.基于SpringBoot + Vue实现的前后端分离-外卖点餐系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的外卖点餐系统设计与实现管理工作系统…

一文带你了解MySQL的约束

文章目录 ☃️概述☃️分类☃️常用约束☃️外键约束❄️❄️外键删除/更新行为 欢迎来到 请回答1024 的博客 🍎🍎🍎欢迎来到 请回答1024的博客 关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平…

怎么在海外平台买东西?Nike海淘攻略

不管在那个海外平台买东西首先要进入官网,最好注册一个gmail账号,这样使用范围比较宽广,在对应平台进行注册账号,比如亚马逊、ebay、Etsy等等 一、Nike海淘攻略 1、然后如果已经会员的话直接输入账号密码登录,如果不…

02 面向切面编程(AOP)核心概念:Aspect

02 面向切面编程(AOP)核心概念:Aspect 一 定义二 构成要素1. Advice(通知)2. Pointcut(切点)3. Join Point(连接点) 三 织入(Weaving)四 样例代码…

为什么3d模型都没有细分---模大狮模型网

在3D设计领域,3D模型是设计师和艺术家们创作的重要作品之一,它们在游戏开发、影视制作、工程建设等领域中扮演着重要角色。然而,尽管有着如此广泛的应用,但在互联网上搜索3D模型时,常常会发现缺乏足够的细分分类。为什…

AtCoder Beginner Contest 351 A~F

A.The bottom of the ninth(思维) 题意 有两只队伍正在进行棒球游戏,每只队伍都有 9 9 9个回合,先手已经结束了所有的回合,并获得了 A 1 , A 2 , … , A 9 A_1, A_2, \ldots, A_9 A1​,A2​,…,A9​分数,而后手只进行了8轮&…

华为鸿蒙应用--封装通用标题栏:CommonTitleBar(鸿蒙工具)-ArkTs

0、效果图 自定义通用标题栏 支持左、中、右常规标题栏设置; 支持自定义视图; 支持搜索功能 一、CommTitleBar代码 import router from ohos.router; import { Constants } from ../../constants/Constants; import { StyleConstants } from ../../…

数据结构 - 顺序表

一. 线性表的概念 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的…

Github进行fork后如何与原仓库同步[解决git clone 太慢的问题]

前言 fork了一个仓库以后怎么同步源仓库的代码? 先说一下git clone太慢的问题,可以通过代理拉取代码,具体请看: https://gitclone.com/ 步骤 1、执行命令 git remote -v 查看你的远程仓库的路径。 以一个实际例子说明&#x…

docker容器通俗理解

前言 如果大家没使用过Docker,就在电脑上下载一个VMware Workstation Pro,创建一个虚拟机安装一个windows操作一下感受一下,为什么我的电脑上还以再安装一台windows主机?其实你可以理解为Docker就是Linux系统的一个虚拟机软件。 我的Windows也可以安装…

【高校科研前沿】东北地理所孙敬轩博士为一作在《中国科学:地球科学(中英文版)》发文:气候变化下东北地区农业绿水安全风险评估

目录 01 文章简介 02 研究内容 03 文章引用 04 期刊简介 01 文章简介 论文名称:Risk assessment of agricultural green water security in Northeast China under climate change(气候变化下东北地区农业绿水安全风险评估) 第一作者及…

猫咪冻干究竟怎么选不踩雷?这几款生骨肉冻干一定适合你家喵

315中国之声的报道揭示了河北省邢台市南和区某宠粮代工厂的“行业秘密”,这无疑给广大宠物主人敲响了警钟。配料表上标注的鸡肉含量高达52%,新鲜鸡小胸占20%,然而所谓的鲜鸡肉实际上却是鸡肉粉。我们养宠物本是为了心灵上的慰藉,但…

栈和队列总结

文章目录 前言一、栈和队列的实现1.栈的具体实现2.循环顺序队列的具体实现 二、栈和队列总结总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版…

揭秘Linux文件系统

前言 在上一篇文件描述符详解中谈论的都是打开的文件,但是在我们的系统中不仅有打开的文件还有许多未打开的文件,那么这些未打开的文件又该如何理解呢?阅读完本篇文章相信你会得到答案。 如果觉得文章内容对你有所帮助的话,可以给博主一键三…

新装电脑Flutter环境部署坑汇总(持续更新)

1.本地安装,安装fvm的坑 本人电脑使用windows ,安装fvm则一般使用choco安装,那么首先需要安装choco,打开powershell/或者cmd运行以下命令: Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager…

图像置乱加密-Arnold加密算法

置乱加密是另一种较常用的加密方法,现也被许多文献选用,置乱加密可以是以像素为单位进行全局置乱,该方式打乱了图像像素值的位置,使其图像内容失去相关性,达到保护的目的。也可以是以块为单位进行置乱,该方…

Kafka报错ERROR Exiting Kafka due to fatal exception during startup

报错: ERROR Exiting Kafka due to fatal exception during startup. (kafka.Kafka$) kafka.common.InconsistentClusterIdException: The Cluster ID FSzSO50oTLCRhRnRylihcg doesnt match stored clusterId Some(0oSLohwtQZWbIi73YUMs8g) in meta.properties. Th…

某宝因SSL证书过期无法正常访问,证书过期问题频发企业如何破局?

近日,有网友发现,某宝网站无法正常访问,出现“此连接非私人连接”提示,而导致此类提示的罪魁祸首是因为SSL证书过期!其实,近年来,因SSL证书过期导致的网站无法正常访问的事件频频发生&#xff0…