JAVA设计模式-行为模式-模版防范模式

 概述

  1. 创建一个抽象类,作为模板类,其中包含定义算法框架的方法,通常称为模板方法。这个方法在模板类中被声明为final,以防止子类重写整个算法框架。

  2. 在模板类中定义一些抽象方法,表示某些特定步骤的具体实现需要由子类来完成

  3. 在模板类中实现通用的步骤,这些步骤在算法中是固定的,不会因为具体实现的不同而改变。这些步骤可以是具体的方法或者空方法。

  4. 子类继承模板类,并实现模板类中的抽象方法,完成特定步骤的具体实现。

可以总结为:

*     1-封装不变的部分,扩展可变的部分
*     2-提取公共代码,便于维护
*     3-优化代码结结构,该抽象的抽象,该复用的复用
*     4-一套模版到处使用

 

此处用制作饮料作为示例来编写代码,制作饮料 分为准备水,准备调料咖啡粉,酸梅粉,橘子汁等等搅拌,然后制作完成

 1-定义模版类

public abstract class DrinkBuildService {

    //准备水
    protected abstract String water(String args);

    //放入材料(咖啡 / 酸梅粉 / 橙汁)
    protected abstract String making(String args);

    //完成
    protected abstract String complete(String args);


    /**
     * <简述>模版方法
     * <详细描述>
     * @author syf
     * @date 2023/8/23 11:02
     * @param args
     * @return java.lang.String
     */
    final public String  start(String args){
        //第一步 准备水
        String water = water(args);

        System.out.println(water);

        //放入调料、材料、搅拌
        String making = making(water);

        System.out.println(making);

        //完成
        String complete = complete(making);

        return complete;
    }
}

2-子类继承模版类

定义咖啡实现类实现接口

public class CoffeeBuildServiceImpl extends DrinkBuildService {

    @Override
    protected String water(String args) {
        return args + "水已经放入杯具";
    }

    @Override
    protected String making(String args) {
        return "搅拌完成";
    }

    @Override
    protected String complete(String args) {
        return "制作完成";
    }
}

定义橙汁实现类实现接口

public class OrangeBuildServiceImpl extends DrinkBuildService {

    @Override
    protected String water(String args) {
        return args + "水已经放入杯具";
    }

    @Override
    protected String making(String args) {
        return "搅拌完成";
    }

    @Override
    protected String complete(String args) {
        return "制作完成";
    }
}

3-结果展示

   @org.junit.jupiter.api.Test
    void contextLoads2() {
        //制作咖啡
        CoffeeBuildServiceImpl coffeeBuildService = new CoffeeBuildServiceImpl();
        String coffee = coffeeBuildService.start("咖啡");
        System.out.println(coffee);
        //制作橙汁
        System.out.println("------------------------");
        OrangeBuildServiceImpl orangeBuildService = new OrangeBuildServiceImpl();
        String orange  = orangeBuildService.start("橙汁");
        System.out.println(orange);


    }

咖啡水已经放入杯具
搅拌完成
制作完成
------------------------
橙汁水已经放入杯具
搅拌完成
制作完成
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syfjava

请博主喝杯蜜雪冰城

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值