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

Java实现模版方法模式

一、简介

1、定义

  模版方法模式(Template Method Pattern)是一种行为设计模式,它在抽象父类中定义了一个操作的算法模板,并将某些步骤的执行延迟到具体子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些特定步骤。通过定义模板方法在抽象父类中,并将一些步骤的实现延迟到具体子类中。

2、策略模式的结构

模版方法模式涉及以下几个角色:
抽象类(AbstractClass):定义抽象基类,为所有子类提供一个算法框架。
具体子类(ConcreteClass)实现:根据需要重写父类提供的算法步骤中的某些步骤。

二、Java实现泡茶和冲咖啡过程案例

/**
 * @Description: 饮料抽象类
 * @Date: 2025-02-11 16:21
 * @Author: gaoyufei
 **/
public abstract class Drink {
    public final void makeDrink(){
         boilWater();//1、烧水
         putIntoCup();//2、茶叶或咖啡放入杯子
         putWaterIntoCup();//3、开水倒入杯子里
        if(isTea()){
            MakeTea();//4、茶需要泡几分钟
        }
        drink();// 5、可以喝了
    }
    public void boilWater(){
        System.out.println("烧水");
    }
    protected abstract void putIntoCup();
    protected  void putWaterIntoCup(){
        System.out.println("开水倒入杯子");
    }
    protected abstract boolean isTea();
    protected abstract void MakeTea();
    protected void drink(){
        System.out.println("可以喝了");
    }
}

/**
 * @Description: 具体类 茶
 * @Date: 2025-02-11 16:31
 * @Author: gaoyufei
 **/
public class Tea extends Drink{
    @Override
    protected void putIntoCup() {
        System.out.println("将茶叶放入杯子");
    }
    @Override
    protected boolean isTea() {
        return true;
    }
    @Override
    protected void MakeTea() {
        System.out.println("泡茶3分钟");
    }
}

/**
 * @Description: 具体类 咖啡
 * @Date: 2025-02-11 16:32
 * @Author: gaoyufei
 **/
public class Coffee extends Drink{
    @Override
    protected void putIntoCup() {
        System.out.println("将咖啡放入杯子");
    }
    @Override
    protected boolean isTea() {
        return false;
    }
    @Override
    protected void MakeTea() {
    }
}

/**
 * @Description: 人
 * @Date: 2025-02-11 16:35
 * @Author: gaoyufei
 **/
public class People {
    public static void main(String[] args) {
        //泡茶过程
        Drink tea=new Tea();
        tea.makeDrink();
        System.out.println("--------------------");
        //冲咖啡过程
        Drink coffee=new Coffee();
        coffee.makeDrink();
    }
}

http://www.kler.cn/a/543264.html

相关文章:

  • Java自动生成api文档
  • 【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)
  • 进程状态
  • jenkins备份还原配置文件
  • Unity3D实现显示模型线框(shader)
  • 怎麼使用靜態住宅IP進行多社媒帳號管理
  • LabVIEW无人机飞行状态监测系统
  • 获取 Windows 视频时长的正确方式——Windows Shell API 深度解析
  • Flask Web开发的重要概念和示例
  • 日志2025.2.12
  • OmniManip:以目标为中心的交互基元作为空间约束实现通用机器人操作
  • AI大模型零基础学习(4):私有化部署与企业级应用——打造你的专属智能大脑
  • 人工智能(AI)基础理论知识学习路线
  • HDFS应用-后端存储cephfs-文件存储和对象存储数据双向迁移
  • 自己部署DeepSeek 助力 Vue 开发:打造丝滑的标签页(Tabs)
  • 基于 Docker 搭建 Elasticsearch + Kibana 环境
  • uniapp 使用 鸿蒙开源字体
  • IntelliJ IDEA 2024.1.4版无Tomcat配置
  • 在nodejs中使用RabbitMQ(一)安装,使用
  • SPI为什么不需要加上拉电阻
  • DeepSeek-V3网络模型架构图解
  • kafka介绍,kafka集群环境搭建,kafka命令测试,C++实现kafka客户端
  • 如何选择合适的搜索关键词优化工具?
  • 按键可视化工具——Keyviz
  • 开源堡垒机 JumpServer 社区版实战教程:一步步构建企业安全运维环境
  • SQL Server:查看当前连接数和最大连接数