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

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

【设计模式】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();
}

②、定义具体类

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

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("红豆奶茶做好啦");
    }
}

③、测试

通过调用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();
    }
}

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

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

相关文章:

  • 【C++之数组与指针2】利用指针对数组求和
  • NOIP 2013 普及组初赛试题
  • 【C语言】如何理解多级指针?
  • 【golang】sorter 的两种实现方式
  • 2022.9.2 OpenCV课程群思考题
  • 408王道操作系统强化——文件管理及大题解构
  • 【MyBatis笔记10】Mybatis中几个动态SQL标签和内置参数
  • 7.Nodejs新特性async和await的使用
  • 怎么安装一个简单的vue3.0框架。整个流程.::
  • 【延展Extension Objective-C语言】
  • IDA* AcWing 181. 回转游戏
  • Web3小知识集锦
  • tensorflow基础
  • android自定义Apk名称和指定生成的路径
  • java框架----SSM快速整合教程
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 230. Kth Smallest Element in a BST
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Babel配置的不完全指南
  • egg(89)--egg之redis的发布和订阅
  • es6
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • JavaScript HTML DOM
  • java多线程
  • MaxCompute访问TableStore(OTS) 数据
  • nodejs:开发并发布一个nodejs包
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • python学习笔记 - ThreadLocal
  • rabbitmq延迟消息示例
  • react-native 安卓真机环境搭建
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vim Clutch | 面向脚踏板编程……
  • Yii源码解读-服务定位器(Service Locator)
  • 半理解系列--Promise的进化史
  • - 概述 - 《设计模式(极简c++版)》
  • 给新手的新浪微博 SDK 集成教程【一】
  • 全栈开发——Linux
  • 如何在GitHub上创建个人博客
  • 一、python与pycharm的安装
  • nb
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ###项目技术发展史
  • #ifdef 的技巧用法
  • #Linux(权限管理)
  • #传输# #传输数据判断#
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (ros//EnvironmentVariables)ros环境变量
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 服务 ServiceController
  • .net生成的类,跨工程调用显示注释