设计模式再探——模板方法模式

news2024/11/24 9:59:49

目录

  • 一、背景介绍
  • 二、思路&方案
  • 三、过程
    • 1.模板方法模式简介
    • 2.模板方法模式的类图
    • 3.模板方法模式代码
    • 4.模板方法模式中的父类为抽象类,为什么不是接口?
    • 5.模板方法模式中方法级别的单一职责
  • 四、总结
  • 五、升华

一、背景介绍

最近公司在做颗粒业务的时候,子类中有很多公共的行为,使得维护非常繁琐;于是就想到了设计模式中的模板方法模式。

二、思路&方案

  • 1.模板方法模式简介
  • 2.模板方法模式的类图
  • 3.模板方法模式代码
  • 4.模板方法模式中的父类为抽象类,为什么不是接口?
  • 5.模板方法模式方法级别的单一职责

三、过程

1.模板方法模式简介

模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

2.模板方法模式的类图

在这里插入图片描述

3.模板方法模式代码

package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;

/**
 * 功能描述:
 *
 * @Author:makang
 * @Date: 2021/5/26 17:29
 */
public class Client {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass();
        abstractClass.TemplateMethod();
    }
}

package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;

/**
 * 功能描述:
 *
 * @Author:makang
 * @Date: 2021/5/26 17:26
 */
public abstract class AbstractClass {
    public abstract void PrimitiveOperation1();
    public abstract void PrimitiveOperation2();

    public void TemplateMethod(){
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
}

package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;

/**
 * 功能描述:
 *
 * @Author:makang
 * @Date: 2021/5/26 17:28
 */
public class ConcreteClass extends AbstractClass{
    @Override
    public void PrimitiveOperation1() {
        System.out.println("AbstractClass 中PrimitiveOperation1方法具体的实现");
    }

    @Override
    public void PrimitiveOperation2() {
        System.out.println("AbstractClass 中PrimitiveOperation2方法具体的实现");
    }
}

4.模板方法模式中的父类为抽象类,为什么不是接口?

答:1.要在父类中定义算法骨架,而这个算法骨架的实现是需要通过抽象类的普通方法来实现的 2.接口是对行为的抽象,如果用接口就与模板方法模式定义中的将一些步骤延迟到子类相悖了

5.模板方法模式中方法级别的单一职责

方法要足够的单一,这样才使得算法的骨架得以通过组合单一的方法实现;另外还使得可将单一的方法延迟到子类去实现

四、总结

  • 1.具体模式:父类实现算法骨架的复用,子类实现部分步骤的不同
  • 2.七大原则:对于子类而言,只需要存在和重新定义需要它管理的特定步骤即可;更符合单一职责
  • 3.软件工程:父类中算法骨架的统一,使得后期对于算法骨架的低维护得以落实

五、升华

对于软件工程的落地,七大原则的遵守,特定场景的完美实现。

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

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

相关文章

关于Chrome浏览器打开某网页报 连接已重置 的解决方法

问题描述: Chrome浏览器(117版本)昨天打开内网站点正常,今天打开时报连接已重置,网页打不开。其他浏览器打开正常。 解决方案1:刷新DNS --- 失败 1、 打开命令行窗口 2、…

超简单的视频截取方法,迅速提取所需片段!

“视频可以截取吗?用相机拍摄了一段视频,但是中途相机发生了故障,录进去了很多不需要的片段,现在想截取一部分视频出来,但是不知道方法,想问问广大的网友,知不知道视频截取的方法。” 无论是工…

葡萄酒按名称分类保护的重要事件有哪些?

葡萄酒可以根据各种方法来进行分类,可以是原产地或称谓,可以是酿造方法和风格,可以是甜味和年份,也可以是使用的葡萄品种。来自云仓酒庄品牌雷盛红酒分享不同原籍国和地区对葡萄酒的分类做法各不相同,许多做法会随着时…

Linux 安装

本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建,也可以直接买一台学习用用. 本章节以 centos6.4 为例。 centos 下载地址: 可以去官网下载…

python3.0 安装后再 cmd下弹win10应用商店的问题

1、问题描述 安装了最新的python安装包后,再cmd上输入:python --version 无效, 然后输入 python 后弹出商店。 2、问题解决 看了很多解决办法都是编辑用户环境变量,将这个python的环境变量放在windowsApps上面,尝试了…

3D灌篮高手

欢迎来到程序小院 3D灌篮高手 玩法&#xff1a; 鼠标左键点击按住屏幕&#xff0c;左边力度条在红色区域时松开鼠标投篮&#xff0c;30秒内完成投篮&#xff0c;统计投中次数&#xff0c;快去成为灌篮高手吧^^。开始游戏https://www.ormcc.com/play/gameStart/186 html <d…

vcruntime140.dll找不到的解决方法-vcruntime140.dll日常修复方法分享

大家好&#xff01;今天&#xff0c;非常荣幸地向大家分享一个与我们日常生活息息相关的话题——电脑计算机突然出现vcruntime140.dll丢失如何修复。作为一名学生 &#xff0c;我们每天都在使用电脑&#xff0c;而这个问题可能会时不时地困扰我们。那么&#xff0c;面对这个问…

用友U8-OA getSessionList.jsp信息泄露 复现

文章目录 用友U8-OA getSessionList.jsp信息泄露 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现4.漏洞进一步利用 用友U8-OA getSessionList.jsp信息泄露 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从…

js高级(代理,浅拷贝深拷贝,节流和防抖,闭包.hasOwnProperty)

1.代理 1.问题:如何定义一个对象,不会被修改,也不能被遍历? 通过Object.defineProperty(对象,属性名,option)定义默认属性 无法被修改无法被删除无法被遍历 注意:Object.Property传入的值与返回的值是同一个地址 可以配置一下属性 value:初始值writable:true (true允许被修改…

sylar高性能服务器-日志(P1-P6)代码解析+调试分析

文章目录 一、整体结构二、LogEvent三、LogLevel四、LogFormatter五、LogAppender六、Logger七、调试7.1调试步骤7.2尝试使用gdb调试 八、附录8.1log.h8.2log.cc8.3test.cc8.4Cmakelists.txt8.4Cmakelists.txt ​ 本篇文章主要针对一下sylar高性能服务器项目视频p1-p6的代码分析…

大华智慧园区管理平台任意密码读取漏洞 复现

文章目录 大华智慧园区管理平台任意密码读取漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 大华智慧园区管理平台任意密码读取漏洞 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&…

shell定时清理日志文件、及crontab说明

服务器日志文件一般是每天一个或多个文件&#xff0c;如果日志文件不清理&#xff0c;时间久了就会将磁盘空间占满&#xff0c;从而影响系统的正常运行。 1、分析磁盘空间占用情况 1.1、df 命令 df 命令以磁盘分区为单位查看文件系统中磁盘空间的使用情况。 语法&#xff1a;…

python基础教程:类class

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 class 定义一个类 class 定义一个类, 后面的类别首字母推荐以 大写 的形式定义&#xff0c;比如Calculator. 冒号不能缺 class可以先定义自己的属性&#xff0c…

Java 面向对象的三大特性

面向对象编程有三大特征: 封装、继承和多态。 1.封装 1&#xff09;封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起数据被保护在内部.程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。 2&#xff09;封装的理解和好处 隐…

Windows安装Node.js

1、Node.js介绍 ①、Node.js简介 Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;它允许开发者使用JavaScript语言来构建高性能的网络应用程序和服务器端应用。Node.js的核心特点包括&#xff1a; 1. 事件驱动: Node.js采用了事件驱动的编程模型&#xff0c;通…

美股游戏股分析:微软收购游戏公司动视暴雪将迎来一个重要里程碑

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;微软(MSFT)收购动视暴雪(ATVI)的交易在做出重大让步后目前已经获得了欧盟和美国的监管批准。 &#xff08;2&#xff09;英国英国竞争和市场管理局(CMA)最初对微软收购动视暴雪…

SpringCloud Alibaba - 分布式事务理论(CAP 定理 和 BASE 理论)

目录 一、分布式事务理论 1.1、分布式事务问题 1.2、什么是分布式事务 1.3、解决分布式事务思路 1.3.1、CAP 定理 a&#xff09;Consistency&#xff08;一致性&#xff09; b&#xff09;Availability&#xff08;可用性&#xff09; c&#xff09;Partition tolerance…

反向生成:根据mybatis生成的Class实体类对象反向生成建表语句

微信公众号&#xff1a;大数据高性能计算 针对数据库不小心被删除的情况&#xff0c;以及需要逆向查看某个开源项目数据库表的情况时&#xff0c;往往需要逆向工程。 在这里我们假设 id 字段为主键。在生成 SQL 建表语句时&#xff0c;我们添加了 PRIMARY KEY (id) 来定义 i…

温控仪工作原理

温控仪的工作原理&#xff0c;是通过温度探头或热电偶反馈的电信号&#xff0c;温控仪将得到的电信号转化成温度值&#xff0c;根据设定的温度值&#xff0c;控制加热器的接通和断开来达到控制温度范围的&#xff1a; 1、温度探头或热电偶受温度变化时&#xff0c;会产生微弱的…

CDN技术与企业网站建设:解决疑问与明智选择

介绍CDN技术与疑问 在数字时代&#xff0c;网站是企业线上存在的门户&#xff0c;因此网站的性能和安全至关重要。为了解决一些与网站建设和性能相关的疑问&#xff0c;让我们首先来了解CDN技术。 什么是CDN技术&#xff1f; CDN&#xff0c;即内容分发网络&#xff08;Conte…