模板模式——星巴克泡茶泡咖啡例题

2023-10-25 12:40

本文主要是介绍模板模式——星巴克泡茶泡咖啡例题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.模板设计模式介绍
    • 2.星巴克咖啡泡茶问题举例
    • 3.原码
    • 4.钩子函数介绍

在这里插入图片描述

1.模板设计模式介绍

模板设计模式—基于抽象类的,核心是封装算法

  • 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供具体实现

  • 在一个方法中定义一个算法的骨架,并将一些具体步骤延迟到子类中实现。

  • 模板模式使得子类可以在不改变算法结构的基础上,重新具体定义算法中的某些步骤

2.星巴克咖啡泡茶问题举例

例如我要制作两种饮品:

coffee:
1.煮开水
2.用开水煮咖啡
3.将饮品倒入杯子中
4.加入牛奶和方糖

tea:
1.煮开水
2.用开水煮茶
3.将饮品倒入杯子中
4.加入柠檬

我们发现制作两种饮品制作过程当中1 3步骤重复,所以可以将他们在父类中实现,制作过程有差异的2 4步骤可以延迟到子类自行实现!

3.原码


abstract  class Drink {final void make(){           //用final修饰确保制作顺序不会被改变boilWater();             //烧开水putCailiao();            //放入茶叶或者coffeepourCup();               //将饮品倒入杯子addSomething();          //加入配料}public void boilWater() {System.out.println("烧开水");}private void pourCup() {System.out.println("将饮品倒入杯中");}/** 咖啡和茶处理这些方法不同,因此这两个方法必须被声明为抽象,留给子类实现 */protected abstract void putCailiao();  //这些方法延迟到子类实现protected abstract void addSomething(); //这些方法延迟到子类实现}public class Tea extends Drink{@Overrideprotected void putCailiao() {System.out.println("煮茶叶了");}@Overrideprotected void addSomething() {System.out.println("加入了柠檬片");}
}public class Coffee extends Drink{@Overrideprotected void putCailiao() {System.out.println("开始煮咖啡");}@Overrideprotected void addSomething() {System.out.println("加入牛奶和糖");}
}public class Test {public static void main(String[] args) {Drink tea=new Tea();Drink coffee =new Coffee();tea.make();System.out.println();coffee.make();}
}

4.钩子函数介绍

  • 钩子方法是一类"默认不做事的方法" ,子类可以视情况决定要不要覆盖它们。
  • 比如说,顾客点杯咖啡时,可以选择加不加牛奶或者糖
abstract  class Drink {final void make(){           //用final修饰确保制作顺序不会被改变boilWater();             //烧开水putCailiao();            //放入茶叶或者coffeepourCup();               //将饮品倒入杯子if(ifCustomerWant()){addSomething();   //加入配料}}void boilWater() {System.out.println("烧开水");}void pourCup() {System.out.println("将饮品倒入杯中");}protected abstract void putCailiao();protected abstract void addSomething();boolean ifCustomerWant(){    //钩子函数默认执行return true;}
}import java.util.Scanner;
public class Coffee extends Drink{@Overrideprotected void putCailiao() {System.out.println("开始煮咖啡");}@Overrideprotected void addSomething() {System.out.println("加入牛奶和糖");}/*** 子类覆写钩子函数*/boolean ifCustomerWant(){System.out.println("请问需要加入牛奶和方糖吗(yes/no)");Scanner sc=new Scanner(System.in);String str=sc.nextLine();if(str.equals("yes")){return true;}else{return false;}}
}

在这里插入图片描述

这篇关于模板模式——星巴克泡茶泡咖啡例题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282655

相关文章

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

Redis中群集三种模式的实现

《Redis中群集三种模式的实现》Redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1. Redis三种模式概述2、Redis 主从复制2.1 主从复制的作用2.2 主从复制流程2

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经