//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();
}
}
标签:18,void,System,class,addMterial,Cake,设计模式,public,模板 From: https://www.cnblogs.com/NIAN2011/p/16782847.html