18.设计模式-模板方法

//1.定义模板抽象父类,将特有的业务定义为抽象方法,定义钩子函数
//2.子类继承抽象父类,实现抽象方法
//3.测试
public abstract class Cake {

//定义成final,禁止子类重写
final void make(){
    this.prepare();
    
    if(customAdd()){
        this.addMterial();
    }
    this.cook();
}

void prepare(){
    System.out.println("开始准备...");
}

//子类需要实现的特定方法
abstract void addMterial();

void cook(){
    System.out.println("开始加热....");
}

//钩子函数,自定义是否调用
boolean customAdd(){
    return true;
}

}

public class FruitCake extends Cake{
void addMterial() {
System.out.println("加入水果...");
}
}

public class WurenCake extends Cake{
void addMterial() {
System.out.println("加入五仁....");
}
}

//普通Cake,通过重写钩子函数
public class CustomCake extends Cake{
void addMterial() {
//空实现
}

@Override
boolean customAdd() {
    return false;
}

}

public class Test {
public static void main(String[] args) {
WurenCake wuren = new WurenCake();
wuren.make();

    FruitCake fruitCake = new FruitCake();
    fruitCake.make();

    CustomCake customCake = new CustomCake();
    customCake.make();
}

}

posted @ 2022-10-11 22:12  NIANER2011  阅读(17)  评论(0编辑  收藏  举报