设计模式---模板方式

这篇博客介绍了模板方法设计模式,通过一个抽象类`SoyaMilk`定义豆浆制作流程,包括选材、浸泡、打碎等步骤,并将添加配料这一步骤留给子类实现。子类如`PureSoyaMilk`、`ReddatesSoyaMilk`和`NutSoyaMilk`可以根据需求覆盖`addCondiments()`方法,实现不同口味的豆浆。博客展示了如何使用模板方法模式来实现代码复用并保持算法结构不变。
摘要由CSDN通过智能技术生成

模板设计模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
public abstract class SoyaMilk {
    //这是模板方法,用final修饰,不允许子类覆盖。模板方法定义了制作豆浆的程序
    final void  prepareRecipe(){
        selectMaterial();
        //判断是否添加配料
        if(customerWantsCondiments()){
            addCondiments();
        }
        soak();
        beat();
    }
    //选材方法,选择黄豆
    void selectMaterial(){
        System.out.println("第一步、选择好了新鲜黄豆");
    }
    //可以添加不同的配料,在这里设置为抽象方法,子类必须实现
    abstract void addCondiments();
    //浸泡
    void soak(){
        System.out.println("第三步、黄豆和配料开始浸泡,大概需要5个小时");
    }

    //放到豆浆机打碎
    void beat(){
        System.out.println("第四步、黄豆的配料放到豆浆机打碎");
    }
    //钩子方法,是否添加配料
    boolean customerWantsCondiments(){
        return true;
    }
}
//制作纯豆浆,不添加任何配料
@SuppressWarnings("all")
public class PureSoyaMilk extends SoyaMilk {

    @Override
    void addCondiments() {

    }

    //覆盖钩子方法,不添加配料
    @Override
    boolean customerWantsCondiments() {
        return false;
    }
}
public class ReddatesSoyaMilk extends SoyaMilk{
    @Override
    void addCondiments() {
        System.out.println("第二步、添加红枣配料");
    }
}
public class NutSoyaMilk extends SoyaMilk{
    @Override
    void addCondiments() {
        System.out.println("第二步、添加核桃配料");
    }
}
public class SoyaMilkTest {
    public static void main(String[] args) {
        //制作红枣豆浆
        System.out.println();
        System.out.println("-----制作红枣豆浆步骤-------");
        SoyaMilk reddatesSoyaMilk = new ReddatesSoyaMilk();
        reddatesSoyaMilk.prepareRecipe();

        //制作核桃豆浆
        System.out.println();
        System.out.println("-----制作核桃豆浆步骤-------");
        SoyaMilk nutSoyaMilk = new NutSoyaMilk();
        nutSoyaMilk.prepareRecipe();
        //制作纯豆浆
        System.out.println();
        System.out.println("-----制作纯豆浆步骤-------");
        SoyaMilk pureSoyaMilk = new PureSoyaMilk();
        pureSoyaMilk.prepareRecipe();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值