抽象基类:
/**
* 抽象基类,为所有子类提供算法框架
*
* 提神饮料
* @author yanghw
*
*/
public abstract class AbstractRefreshBeverage {
/**
*制备饮料的模板方法
*/
public void prepareBeverageTemplate(){
//1.将水煮沸
boilWater();
//2.泡制饮料
brew();
//3.将饮料倒入杯中
pourInCup();
//4.加入调味料
addCondiments();
}
/*
* 抽象方法-加入调味料
*/
protected abstract void addCondiments();
/*
* 抽象方法-泡制饮料
*/
protected abstract void brew();
/*
* 基本方法-将水煮沸
*/
private void boilWater() {
System.out.println("将水煮沸...");
}
/*
* 基本方法-将饮料倒入杯中
*/
private void pourInCup() {
System.out.println("将饮料倒入杯中");
}
}
具体实现类:
/*
* 咖啡制备
*/
public class Coffee extends AbstractRefreshBeverage{
@Override
protected void addCondiments() {
System.err.println("咖啡中加入糖和牛奶");
}
@Override
protected void brew() {
System.err.println("用沸水冲泡咖啡");
}
}
测试类:
/*
* 测试
*/
public class RefreshBeverageTest {
public static void main(String[] args) {
//使用同一模板制备咖啡
AbstractRefreshBeverage b1 = new Coffee();
b1.prepareBeverageTemplate();
}
}
基类中可定义钩子函数提供空的或默认实现,子类可修改实现或使用默认实现逻辑。