模板设计模式
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
public abstract class SoyaMilk {
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();
}
}