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生…

计算机网络标准化工作及性能指标

一、标准化工作流程 因特网草案建议标准:成为RFC(request for comment)—因特网标准的形式草案标准:由IETF,IBA进行审核因特网标准 二、标准化工作的相关组织 国际标准化组织ISO国际电信联盟ITU国际电气电子工程师协会IEEEInternet工程任务组IETF 三…

深入了解ChatGPT:原理、架构、发展与使用指南

引言 近年来,人工智能技术取得了显著的发展,尤其是在自然语言处理(NLP)领域。OpenAI推出的ChatGPT作为这一领域的佼佼者,以其出色的语言理解和生成能力,引起了广泛关注。本文将详细介绍ChatGPT的原理架构、…

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

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

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

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

flask + celery + redis + flower

flask: pip3 install flask celery flask 项目文件: 包含 app.py,config.py。 app.py: from flask import Flask, flash, render_template, request, redirect, url_for from celery import Celeryapp Flask(__name__) app.c…

一文带你了解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模型时,常常会发现缺乏足够的细分分类。为什…

DSP实验

实验准备: 首先,确保仿真器已经正确连接到计算机并与实验箱相连。接着,将试验箱上电,并确保实验板的电源开关处于打开状态。这样可以保证实验板能够正常供电。 启动 Code Composer Studio v5: 打开你的计算机上已安装…

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轮&…

java.net.BindException: Address already in use: no further information

项目场景: 基于Netty实现的文件管理,对客户端windows系统上的大量中小文件进行上传,并回调rest接口记录文件上传状态。 问题描述 在运行了一段时间后,文件传输过程中出现如下异常: io.netty.channel.AbstractChannel…

【打工日常】云原生之使用Docker部署开源云笔记工具Leanote

一、Leanote蚂蚁笔记介绍 1.Leanote简介 Leanote 蚂蚁笔记是一款国产开源的私有云笔记工具。它支持普通格式笔记、Markdown语法、专业数学公式编辑、和思维导图,并且支持vim&emacs等编辑模式。 2.Leanote功能 拥有Markdown 语法支持、无干扰写作模式、Vim和Emacs编辑模式…

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

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

数据结构 - 顺序表

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

django小技巧

1、django model中的表注释和字段注释迁移到数据库中 参考链接:https://blog.csdn.net/htsssss/article/details/131932381

调用示例、python语言调用翔云发票查验接口、发票OCR接口

python语言调用翔云发票查验接口、发票OCR接口其实方法很简单,只需要能看懂开发代码,然后在翔云开发者中,下载所需要的语言开发示例,更换产品参数即可。 发票管理是企业日常工作中不可或缺的一环,但传统的发票查验和识…

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

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

23种设计模式简单记录

23种设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。下面是这些设计模式的概览: 创建型模式(Creational Patterns) 单例模式(Singleton):确保一个类只有一个实例,并…