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

news2024/11/25 7:12:14

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是模板方法模式?

        模板方法模式,是一种你那个行为型设计模式,它定义了一个算法的骨架,将其中一些步骤的实现延迟到子类中.模板方法使得子类可以在不改变算法结果的情况下,重新定义算法中的某些步骤

二、模板方法模式的优缺点:

优点:

  1. 提高代码复用性:模板方法模式可以将一些通用的代码放在抽象父类中,子类只需要实现具体的逻辑即可,避免了重复的代码。

  2. 提高代码可维护性:当需求发生变化时,只需要修改抽象父类的代码即可,子类不需要做出任何改变。

  3. 方便扩展功能:通过继承抽象父类并重写其中的方法,可以轻松地扩展功能,而不需要修改原有的代码。

  4. 符合开放封闭原则:抽象父类和子类之间的耦合度较低,可以方便地扩展新的子类,同时也不会影响到已有的子类

缺点:

  1. 限制子类的灵活性:模板方法模式将算法的骨架固定在抽象类中,子类只能通过实现抽象方法来改变算法中的某些细节,但是不能改变算法的整体结构,这样可能会限制子类的灵活性。

  2. 可读性下降:模板方法模式中,算法的实现被分散在不同的方法中,这可能会导致代码的可读性下降。

  3. 违反单一职责原则:模板方法模式中,抽象类既包含算法的骨架,又包含算法中的某些细节实现,这可能会导致抽象类承担过多的职责,违反单一职责原则。

三、模板方法模式的结构:

四、模板方法模式实战:

        以上结构图为例,小明(A)和小美(B)二者都是同班同学,他们都要经理上学过程中老师上课这一过程,经历老师进门->开始授课->结束,但这一过程中小明和小美各自接受程度或者自控力是不一样的,导致小美就变成了学霸,而小明回家不敢告诉妈妈.

1.创建模板抽象类AttendClass

 

2.创建抽象类子类StudentA和StudentB

 

 3.测试

4.结果 

 

 

五.总结

  1. 需要定义一个算法框架,而该框架的某些步骤可以有不同的实现方式。
  2. 子类实现中存在大量重复代码,可以将这些代码抽象到父类中,提高代码复用性和可维护性。
  3. 需要控制子类的扩展,只允许子类实现算法框架中的某些步骤,不允许子类修改算法框架的结构。

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

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

相关文章

java生成随机字符串的方法

今天我们来学习下随机数的生成,随机数就是不确定的数,它可以是任意一个整数或者字符串。下面就让我们一起来学习下随机字符串的生成吧。 首先,我们需要先定义一个名为 str的数组,并将它作为输入文件。 1、使用 Java中的 str作为输…

传播的最大能量场来自私域的裂变——“春生百味”品牌营销裂变活动复盘后记

关于大宗家电等耐用品品牌想要精准触达潜在用户,如何实施传播策略? 刚刚与方太品牌方复盘完3月份“春生百味”关于营销裂变直播活动的整体效果,我们借此次整体案例实施过程的梳理,以分享几个裂变过程中的关键点。 传播的最大能量…

React styled-components(二)—— props、attrs属性

styled-components props、attrs属性propsprops 穿透添加 attrs 属性获取 state 中的样式变量控制样式通过 props 控制样式通过 css 控制样式props props 穿透 styled-components 可以 props 穿透,把属性穿透到元素中。 通常,用 css 的 input 组件实现…

【Python】【进阶篇】十七、Python爬虫实现实时翻译

目录十七、Python爬虫实现实时翻译17.1 JS代码slat与sign17.2 Python代码表示参数17.3 完整程序实现十七、Python爬虫实现实时翻译 YD翻译是以异步方式实现数据加载的,要实现数据抓取,其过程极其繁琐。 上一节《Python爬虫的浏览器实现抓包》&#xff…

使用LeafLet叠加Geoserver wms图层到已有底图的方法

背景 随着现代城市交通建设的飞速发展,各个城市的地铁路线和地铁站点也是越来越多。地铁极大的方便了广大人民的交通出行。作为Giser,经常会遇到需要将一份shp数据在地图上展示,甚至需要在网页端进行浏览的需要。把shp这种空间矢量数据进行we…

数据库笔记Ch04----概念数据库的设计(1)

前三章我们学习了如何使用DBMS我们学会了增删改查,插入数据库,创建视图... 这一章是我们的数据库刚刚建立,只有一个需求,需要根据用户的需求来创建数据库,每个表有哪些属性,参照关系是什么,主键…

一.Jetpack全套

Jetpack全套一.Jetpack介绍1.特性:2.分类:二.应用架构三.LifeCycle:1.简介2.简单使用3.实战:Dialog内存泄漏四.VideModel1.介绍2.简单使用3.AndroidViewModel使用4.使用viewmodel实现fragment直接数据共享五.LiveData1.介绍2.常用方法3.使用场…

车载 OTA技术概念

1 OTA技术概念 随着高级辅助驾驶的发展和自动驾驶的引入,汽车变得越来越智能,这些智能汽车被软件控制,装有巨量的软件程序,当出现一个软件程序问题或者更新时,如果按照传统的解决方式,那都将是一项很繁重的…

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…

云开发--实现发送邮件+短信+链接跳转小程序功能

目录 1、小程序实现发送邮件 准备一个qq邮箱,并启动SMTP服务 确定小程序云开发环境,并新建云函数 2、小程序实现发送短信 确定应用 确定签名 确定模板 编写云函数-发送短信 3、链接跳转小程序 H5 配置 生成 URL Link 学习记录: …

【获奖案例巡展】科技向善之星——中航电梯5G+大数据管理平台

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量&#xff0…

网络编程(python)

文章目录一、网络基础(IP,端口,TCP等)二、TCP网络应用可开发流程三、HTTP协议和静态Web服务器四、搭建Python自带静态Web服务器一、网络基础(IP,端口,TCP等) IP地址:标识…

企业的数据中台到底指的是什么?_光点科技

随着数据技术的不断发展和企业数据应用的广泛应用,越来越多的企业开始将数据中台作为数字化转型的核心战略之一。那么,企业的数据中台到底指的是什么呢? 数据中台是一种以数据为核心的企业数字化转型架构,旨在通过数据的汇聚、整合…

Lego- 美团接口自动化测试实战(详细解析)

目录:导读 一、概述 1.1 接口自动化概述 1.2 提高 ROI 1.3 Lego 的组成 二、脚本设计 2.1 Lego 的做法 2.2 测试脚本 2.3 配置文件 三、用例设计 3.1 一些思考 3.2 Lego 接口自动化测试用例 3.3 参数化 3.4 前后置动作 3.5 执行各部分 四、网站功能 …

软件测试员----面试,你准备好了么?

最近有机会做一些面试工作,主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色,经历了不少次的面试之后,多少也积累一点面试的经验,现在发生了角色转变。初次的面试就碰到个工作年限比我长的,也没有时间…

c++11 标准模板(STL)(std::stack)(四)

定义于头文件 <stack> template< class T, class Container std::deque<T> > class stack;std::stack 类是容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO &#xff08;先进后出&#xff09;数据结构。 该类模板表现为底层容器的包装…

Spark学习——DataFrame清洗HDFS日志并存入Hive中

目录 1.开启Hadoop集群和Hive元数据、Hive远程连接 2.配置 3.读取日志文件并清洗 4.单独处理第四列的数据——方法一&#xff1a; 5.单独处理第四列的数据——方法二&#xff1a; 6.单独处理第四列的数据——方法三&#xff1a; 7.数据清洗结果展示 8.存入Hive中 9.…

The 2021 China Collegiate Programming Contest (Harbin) D. Math master

题目链接 题解 2632^{63}263大概是101910^{19}1019那么一共有19位需要讨论, 每一个位数各有保留和删除两种状态, 全部状态就是2182^{18}218种 因为每一位数都有两种状态, 使用二进制数表示每个状态, 正好能全部表示, 在二进制位数下1表示保留, 0表示删除(反过来也一样) 使用二…

分布式版本控制工具 —— Git

一、Git 基本介绍 1.1 相关概念 1️⃣ 首先&#xff0c;我们要知道什么是Git&#xff1f; Git 是一个免费、开源的版本控制系统&#xff0c;它可以有效地跟踪文件的更改&#xff0c;协调多人在同一个项目上的开发&#xff0c;以及管理不同版本的代码。 Git 最初是由 Linus …

微服务架构下认证和鉴权理解

认证和鉴权 从单体应用到微服务架构&#xff0c;优势很多&#xff0c;但是并不是代表着就没有一点缺点了。 微服务架构&#xff0c;意味着每个服务都是松散耦合的。因此&#xff0c;作为软件工程师和架构师&#xff0c;我们在分布式架构中面临着安全挑战。微服务对外开放的端…