面试手撕代码-二十三种设计模式之模版方法模式

embedded/2024/10/20 16:49:20/
package com.study.handcode.设计模式.行为型模式;import java.io.InputStream;public class 二十三种设计模式之模版方法模式 {public static void main(String[] args) {/*** 1、模版方法就是在抽象类中提供了一个算法流程,但是这个算法流程中有一些抽象方法,需要* 子类进行自定义实现* 2、InputStream中的read(new byte[1], 0, 10)就是一个算法流程,其中有一个read()方法* 用于读取一个byte,需要子类根据自定义进行实现* 3、模版方法包括:抽象类(模版方法(一个算法的框架,具体的流程))、* 基本方法-模版方法中所需要调用的方法(抽象方法-子类实现、具体方法-各个子类可以通用,在抽象类中实现、* 钩子方法-抽象类中实现,用于判断逻辑)、具体子类*/// 举例:炒菜(炒鸡蛋、炒糖醋里脊)// 炒鸡蛋StirFly flyEgg = new FlyEgg();flyEgg.cookprocess();// 做糖醋里脊StirFly pork = new SweetSourPork();pork.cookprocess();}// 抽象类static abstract class StirFly{// 模版方法public final void cookprocess(){  // final 保证该算法不被修改System.out.println("===炒菜步骤===");// 1、倒油 具体方法,炒菜第一步都是倒油,可以抽象出来this.pourOil();// 2、热油 具体方法this.heatOil();// 3、倒菜 抽象方法,需要子类自定义实现this.pourVegetable();// 4、加调料 抽象方法this.addOther();// 5、开始抄 具体方法this.fly();System.out.println("===炒菜结束===");}private void fly() {System.out.println("5、开始翻炒");}public abstract void addOther();public abstract void pourVegetable();private void heatOil() {System.out.println("2、热油");}private void pourOil() {System.out.println("1、开始倒油");}}// 炒鸡蛋类(具体类)static class FlyEgg extends StirFly{@Overridepublic void addOther() {System.out.println("4、加入盐巴");}@Overridepublic void pourVegetable() {System.out.println("加入鸡蛋");}}// // 糖醋里脊(具体类)static class SweetSourPork extends StirFly{@Overridepublic void addOther() {System.out.println("4、加入糖");}@Overridepublic void pourVegetable() {System.out.println("3、加入鸡肉");}}
}

http://www.ppmy.cn/embedded/129037.html

相关文章

stm32启动时用到的systeminit、__main说明

先运行systeminit函数,其功能:初始化时钟(SYSCLK, HCLK, PCLK2 and PCLK1 prescalers)、配置中断向量表(中断向量表的定位是在flash还是SRAM)再运行__main函数: 作用:Initializatio…

Flutter 中的 PopScope 小部件:全面指南

Flutter 中的 PopScope 小部件:全面指南 在 Flutter 应用开发中,导航和路由管理是构建复杂应用时必须面对的挑战之一。PopScope 小部件是 Flutter 2.0 版本引入的一个新功能,它提供了一种更灵活的方式来控制页面的弹出和返回行为。本文将带你…

JVM进阶调优系列(2)字节面试:JVM内存区域怎么划分,分别有什么用?

像字节、阿里、腾讯、美团、京东等大厂面试,JVM调优必问必答必会的问题,重要性不言而喻。 上篇文章详细分析了类加载器类型、双亲委派机制优缺点、以及如何打破双亲委派机制。末尾我们留了一个问题:类加载到内存过程具体会经过那些流程&#…

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中,随着业务需求的增长,数据库表结构和数据往往需要进行迁移和更新。迁移(Migration)是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…

【python_修改PPT中字体,run.font.name只对英文生效怎么办?】

python_修改PPT中字体,run.font.name只对英文生效怎么办? 参考:使用pptx_ea_font库设置中文字体 from pptx import Presentation from pptx.util import Pt from pptx_ea_font import set_font# 打开现有的 PPT 文件 prs Presentation(D:\…

LeetCode 19 - 删除链表的倒数第N个节点

题目描述 给你一个链表,删除链表的倒数第 N 个节点,并且返回链表的头结点。 例如: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]解题思路 我们可以使用双指针的方法来解决这个问题。主要思路是使用两个指针fsat和…

Substrate 网络层深度解读:libp2p 助力去中心化点对点高效通信

区块链中需要高效的通信工具来确保节点之间的顺畅交互。而 libp2p 正是开发者在点对点通信中不可或缺的框架,提供了强大的模块化功能,使得去中心化网络中的消息传递变得更加灵活且安全。在 Substrate 中,libp2p 的集成帮助开发者轻松实现各种…

定时发送邮件

1.先连接虚拟机进行挂载 2.编辑dnf配置文件 查看 3.使用dnf安装邮件客户端工具 4.配置文件里写入邮箱信息 [rootlocalhost ~]#vim /etc/s-nail.rc 5.测试邮件服务 6.最后设置定时任务 [rootlocalhost ~]# crontab -e 完成