• 【设计模式】Java设计模式 - 模板模式


    【设计模式】Java设计模式 - 模板模式

    😄 不断学习才是王道
    🔥 继续踏上学习之路,学之分享笔记
    👊 总有一天我也能像各位大佬一样
    🏆 一个有梦有戏的人 @怒放吧德德
    🌝分享学习心得,欢迎指正,大家一起学习成长!

    请添加图片描述

    简介

    在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
                                                                                                                                                        ———— 菜鸟联盟
    UML图:
    在这里插入图片描述

    模板模式实例

    本次实验采用不同种奶茶制作的例子,奶茶类作为抽象类,提供制作奶茶过程的方法,需要子类实现的方法作为抽象方法。在定义两种不同的奶茶。最后通过测试得出结论。
    本次实验的类图:
    在这里插入图片描述

    ①、定义抽象类(模板类)

    除了公共方法,其他变化的方法都由子类实现。

    package com.lyd.demo.template;
    /**
     * @Author: lyd
     * @Description: 抽象类 - 奶茶
     * @Date: 2022-09-02
     */
    public abstract class MilkTea {
        final public void make() { // 子类不需要重写
            pourTea();
            pourMilk();
            filterTea();
            addMaterials();
            stir();
            success();
        }
        public void pourTea() {
            System.out.println("倒入茶叶焖三分钟");
        }
        public void pourMilk() {
            System.out.println("倒入牛奶加热至小泡");
        }
        public void filterTea() {
            System.out.println("过滤茶叶");
        }
        public abstract void addMaterials(); // 添加东西,子类实现
        public void stir() {
            System.out.println("搅拌");
        }
        public abstract void success();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    ②、定义具体类

    具体类,实现父类的抽象方法,这里只粘贴红豆奶茶类

    package com.lyd.demo.subclass;
    
    import com.lyd.demo.template.MilkTea;
    
    /**
     * @Author: lyd
     * @Description: 红豆奶茶
     * @Date: 2022-09-02
     */
    public class RedBeanMilkTea extends MilkTea {
        public void addMaterials() {
            System.out.println("添加红豆");
        }
    
        public void success() {
            System.out.println("红豆奶茶做好啦");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    ③、测试

    通过调用make方法就可以自动调用子类的特有方法实现。

    package com.lyd.demo.test;
    
    import com.lyd.demo.subclass.PearlMilkTea;
    import com.lyd.demo.subclass.RedBeanMilkTea;
    import com.lyd.demo.template.MilkTea;
    
    /**
     * @Author: lyd
     * @Description: 测试
     * @Date: 2022-09-02
     */
    public class TemplateTest {
        public static void main(String[] args) {
            MilkTea redBeanMilkTea = new RedBeanMilkTea();
            redBeanMilkTea.make();
            System.out.println("************************************************");
            MilkTea pearlMilkTea = new PearlMilkTea();
            pearlMilkTea.make();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行结果
    在这里插入图片描述
    👍创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得一键三连哦!👍

    今天内容比较简单,很容易理解,设计模式一路过来也到了模板模式,一切还是很顺利的,也加深了对java面向对象的理解。

  • 相关阅读:
    编程向导-JavaScript-基础语法-算术/赋值/逗号/运算符
    【ChatOCR】OCR+LLM定制化关键信息抽取(附开源大语言模型汇总整理)
    K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路
    Word格式处理控件Aspose.Words for .NET教程——插入、修改、删除、提取目录
    秋招准备--基础知识复习--系统编程
    09_瑞萨GUI(LVGL)移植实战教程之拓展练习
    第二次工业革命
    marquee.弹窗事件
    vue2全家桶-vuex
    leetcode3. 无重复字符的最长子串 [滑动窗口]
  • 原文地址:https://blog.csdn.net/qq_43843951/article/details/126671310