方法1:
//冲泡咖啡类
class Coffee{
//制作咖啡的流程(算法)
void prepareRecipe(){
this.boilWater();
this.pourWaterIntoCup();
this.pourInCup();
this.addSugarAndMilk();
}
//1:将水煮沸
public void boilWater(){
System.out.println("水煮沸了!");
}
//2:将水倒进杯子
public void pourWaterIntoCup(){
System.out.println("将水倒进杯子");
}
//3:将咖啡倒进杯子
public void pourInCup(){
System.out.println("Pouring into cup");
}
//4:加糖和牛奶
public void addSugarAndMilk(){
System.out.println("Adding Sugar and Milk!");
}
}
public class Test{
public static void main(String[] args){
Coffee coffee = new Coffee();
coffee.prepareRecipe();
System.out.println("--------------");
Tea tea = new Tea();
tea.prepareRecipe();
}
}
//冲泡茶类
class Tea{
void prepareRecipe(){
boilWater();
pourWaterIntoCup();
pourInCup();
addLemon();
}
public void boilWater(){
System.out.println("水煮沸了!");
}
public void pourWaterIntoCup(){
System.out.println("将水倒进杯子");
}
public void pourInCup(){
System.out.println("Pouring the cup!");
}
public void addLemon(){
System.out.println("Adding lemon!");
}
}
方法2:
abstract class Prepare{
void prepareRecipe(){ //制作流程算法
boilingWater();
pourWaterIntoCup();
addMajor();
addSeasoning();
}
void boilingWater(){
System.out.println("水煮沸了!");
}
void pourWaterIntoCup(){
System.out.println("将水倒进杯子");
}
abstract void addMajor();
abstract void addSeasoning();
}
class Tea extends Prepare{
void addMajor(){
System.out.println("将茶叶倒进杯子");
}
void addSeasoning(){
System.out.println("将柠檬倒进杯子");
}
}
class Coffee extends Prepare{
void addMajor(){
System.out.println("将咖啡粉倒进杯子");
}
void addSeasoning(){
System.out.println("将糖和牛奶倒进杯子");
}
}
public class Test{
public static void main(String[] args){
new Tea().prepareRecipe();
System.out.println("-----------");
new Coffee().prepareRecipe();
}
}
分析:方法2对方法1进行了改进,基于茶与咖啡在冲泡的过程中前两个步骤相同,可以利用抽象方法,来简化代码量。制作流程算法,在定义测试类的时候,可以减化方法调用,用不着一个个去调用Tea和Coffee中的方法。