Java实现模版方法模式

一、简介

1、定义

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

2、策略模式的结构

模版方法模式涉及以下几个角色:

抽象类(AbstractClass):定义抽象基类,为所有子类提供一个算法框架。

具体子类(ConcreteClass)实现:根据需要重写父类提供的算法步骤中的某些步骤。

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

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();
    }
}
相关推荐
摇滚侠3 分钟前
SpringMVC 入门到实战 配置类替换 XML 配置文件 86-91
xml·java·后端·spring·maven·intellij-idea
栗子~~6 分钟前
金融场景下BigDecimal 运算规范 + 常用场景使用 + 数据库字段设计详解
java·数据库·金融
我登哥MVP9 分钟前
SpringCloud Alibaba 核心组件解析:服务注册与发现(Nacos)
java·spring boot·后端·spring·spring cloud·java-ee·maven
兰令水15 分钟前
leecodecode【单调栈】【2026.6.12打卡-java版本】
java·开发语言·算法
云烟成雨TD20 分钟前
Agent Scope Java 2.x 系列【8】工具调用
java·人工智能·agent
AI人工智能+电脑小能手28 分钟前
【大白话说Java面试题 第112题】【并发篇】第12题:AQS 中节点的入队时机有哪些?
java·开发语言·面试
摇滚侠28 分钟前
SpringMVC 入门到实战 处理静态资源的过程 64
java·后端·spring·maven·intellij-idea
影寂ldy29 分钟前
C# 泛型委托
java·算法·c#
摇滚侠30 分钟前
MyBatis 入门到项目实战 MyBatis 核心配置文件 15-19
java·tomcat·mybatis
IT WorryFree30 分钟前
Zabbix 7.4 API 可同步全量参数清单(同步第三方系统专用)
java·开发语言·zabbix