定义操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
炒菜的步骤是固定的,分为倒油,热油,到调料,翻炒等步骤,但是具体炒什么菜,倒什么调料是不一定的,通过模板方法来实现
类图:
/**
* 抽象类 定义模板方法和基本方法
*/
public abstract class AbstractClass {
// 模板方法
public final void cookProcess(){
pourOil();
heatOil();
pourVegetable();
pourSauce();
fry();
}
// 第一步 倒油 具体方法
public void pourOil(){
System.out.println("倒油。。。");
}
// 第二部 热油 具体方法
public void heatOil(){
System.out.println("热油。。。");
}
// 第三步 倒蔬菜 炒什么菜是不一定的 抽象方法
public abstract void pourVegetable();
// 第四步 倒调味品 倒什么调味品是不一定的 抽象方法
public abstract void pourSauce();
// 第五步 翻炒 具体方法
public void fry(){
System.out.println("翻炒。。。");
}
}
/**
* 炒茄子类
*/
public class ConcreteClassEggplant extends AbstractClass{
@Override
public void pourVegetable() {
System.out.println("下锅的茄子");
}
@Override
public void pourSauce() {
System.out.println("放点盐");
}
}
/**
* 炒土豆丝类
*/
public class ConcreteClassPotato extends AbstractClass{
@Override
public void pourVegetable() {
System.out.println("下锅的土豆丝");
}
@Override
public void pourSauce() {
System.out.println("放点醋");
}
}
public class Test01 {
public static void main(String[] args) {
// 炒茄子
ConcreteClassEggplant eggplant = new ConcreteClassEggplant();
// 调用炒菜的方法
eggplant.cookProcess();
}
}