Day316,2024年Java社招面试题

}

}

RedBeanSoyaMilk

public class RedBeanSoyaMilk extends SoyaMilk {

@Override

void addCondiments() {

System.out.println(" 加入上好的红豆 ");

}

}

SoyaMilk抽象类

//抽象类,表示豆浆

public abstract class SoyaMilk {

//模板方法, make ,

//模板方法可以做成 final , 不让子类去覆盖重写

final void make() {

select();

addCondiments();

soak();

beat();

}

//选材料

void select() {

System.out.println("第一步:选择好的新鲜黄豆 ");

}

//添加不同的配料, 抽象方法, 子类具体实现

abstract void addCondiments();

//浸泡

void soak() {

System.out.println("第三步, 黄豆和配料开始浸泡, 需要 3 小时 ");

}

void beat() {

System.out.println("第四步:黄豆和配料放到豆浆机去打碎 ");

}

}

五、模板方法模式的钩子方法


  1. 在模板方法模式的父类中,我们可以定义一个方法,它默认不做任何事,子类可以视情况要不要覆盖它,该方法称为“钩子”。

2)还是用上面做豆浆的例子来讲解,比如,我们还希望制作纯豆浆,不添加任何的配料,请使用钩子方法对前面的模板方法进行改造

  • 代码

//抽象类,表示豆浆

public abstract class SoyaMilk {

//模板方法, make

//模板方法可以做成 final , 不让子类去覆盖.

final void make() {

select();

if(customerWantCondiments()) {

addCondiments();

}

soak();

beat();

}

//选材料

void select() {

System.out.println("第一步:选择好的新鲜黄豆 ");

}

//添加不同的配料, 抽象方法, 子类具体实现

abstract void addCondiments();

//浸泡

void soak() {

System.out.println("第三步, 黄豆和配料开始浸泡, 需要 3 小时 ");

}

void beat() {

System.out.println("第四步:黄豆和配料放到豆浆机去打碎 ");

}

//钩子方法,决定是否需要添加配料

boolean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值