当前位置: 首页 > news >正文

java 设计模式_行为型_22模板模式

22.模板模式
模板方法(Template Method)作为Java的设计模式之一,一个词概括其优势特点那就是:抽象步骤
首先我们应该抽出共通的东西做一个父类(Base类),其次具体的蛋糕制作由子类进一步实现,每一种制作方式我们就拓展一个子类

UML类图:
在这里插入图片描述

仔细观察Cake类,你会发现make方法是这个类的核心,make()中便是执行制作的核心代码,为了尽可能将共通的东西都留在父类(base类),我们要进一步将make()中的代码拆分,让其变成众多子步骤方法如下:
一、抽象类:蛋糕

public abstract class Cake {public final void make(){makeStart();//开始制作makeCakeGerm();//制作蛋糕胚makeCream();//怎么做wipeCakeGerm();//将奶油抹到蛋糕胚上piping();//怎么抹makeFinish();//结束制作}private void makeStart(){System.out.println("开始制作蛋糕");}private void makeCakeGerm(){System.out.println("制作蛋糕胚");}public abstract void makeCream();private void wipeCakeGerm(){System.out.println("将奶油抹到蛋糕胚上");}public abstract void piping();private void makeFinish(){System.out.println("结束制作蛋糕");}
}

我们可以看到已经把make方法中的步骤进一步拆分细化,有先做蛋糕胚,再做奶油,然后涂抹到蛋糕胚上,最后裱花
我们来注意几个细节:

  • 1、cake类成为了抽象类,没啥好说的,方法都抽象了
  • 2、make方法增加了final修饰,不希望子类覆写这个方法,防止流程被更改
  • 3、步骤抽象化,这是模板方法的核心,步骤的具体实现交由子类自行实现,每一种蛋糕都可以用不同的子类独立实现,这样可读性就大大提高了,而且扩展也非常方便,只需要实现一个新的子类即可

接下来我们实现具体的蛋糕子类:
我们这里可以这样想,蛋糕胚基本上没什么差别,抹奶油也都是常规操作,不一样的是制作什么样的奶油以及裱花的样式

蛋糕A:

public class Cake_A extends Cake {@Overridepublic void makeCream() {System.out.println("植物奶油 抹茶味");}@Overridepublic void piping() {System.out.println("裱花八朵");}
}

蛋糕B:

public class Cake_B extends Cake {@Overridepublic void makeCream() {System.out.println("动物奶油 巧克力味");}@Overridepublic void piping() {System.out.println("裱个生日快乐");}
}

测试类:

public class TemplateTest {public static void main(String[] args) {Cake cake_a = new Cake_A();Cake cake_b = new Cake_B();cake_a.make();System.out.println("*********************");cake_b.make();}
}

输出结果:

开始制作蛋糕
制作蛋糕胚
植物奶油 抹茶味
将奶油抹到蛋糕胚上
裱花八朵
结束制作蛋糕开始制作蛋糕
制作蛋糕胚
动物奶油 巧克力味
将奶油抹到蛋糕胚上
裱个生日快乐
结束制作蛋糕

相关文章:

  • web项目部署配置HTTPS遇到的问题解决方法
  • 【友加畅捷】T1飞跃版账套隐藏设置
  • 数据赋能(280)——过程管理——反馈机制
  • Spring 框架核心功能全解
  • 计算机网络期末速成 网络层 判断及单选题
  • 深度学习实战111-基于神经网络的A股、美股、黄金对冲投资策略(PyTorch LSTM)
  • MyBatis 模糊查询终极教程:安全高效的搜索实现
  • NLP学习路线图(五十一):PyTorch/TensorFlow
  • 论文笔记:Repetition Improves Language Model Embeddings
  • 人工智能100问☞第48问:GPT是怎么生成文本的?
  • Attention Backend的认识
  • 【完整源码+数据集+部署教程】水位面图像分割系统源码和数据集:改进yolo11-EMSC
  • 【C++】unordered_map和unordered_set的使用
  • 物理学 | 本质 / 体系 / 应用 / 教育启示
  • Java 中 DataSource-数据源 的基础介绍
  • day33 MLP神经网络的训练
  • FPGA基础 -- Verilog HDL 结构风格的描述
  • 企业级 Vue3 项目 iframe 封装方案
  • Excel单元格数值统计 - 华为OD机试真题(Python题解)
  • 宇宙尽头是WPS之——【Excel】一个自动重新排序的宏
  • 微商城网站建设教程/软文代写接单平台
  • 木兰网站建设/黄冈网站推广软件
  • 兰州市城市建设设计院官方网站/微友圈推广平台怎么加入
  • 东莞网站建设推广服务/seo站内优化包括
  • 网站建设云梦/长春网站制作设计
  • 上海的公司都有哪些/seo推广工具