模板模式

2018-01-14  本文已影响7人  yangzai
public abstract class HotDrink {
    //步骤是固定的,所以用final修饰,不允许改变
    public final void prepareRecipe(){
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }
    //这一步是固定的,所以用final修饰,不允许改变
    public final void boilWater() {
        System.out.println("烧水");
    }
    private final void pourInCup() {
        System.out.println("倒进杯子中");
    }
    protected abstract void brew();
    protected abstract void addCondiments();
}
//咖啡对象
public class Coffee extends HotDrink {
    @Override
    protected void brew() {
        System.out.println("冲泡咖啡");
    }
    @Override
    protected void addCondiments() {
        System.out.println("添加糖和牛奶");
    }
}
//茶对象
public class Tea extends HotDrink {
    @Override
    protected void brew() {
        System.out.println("冲泡茶叶");
    }
    @Override
    protected void addCondiments() {
        System.out.println("添加柠檬");
    }
}

使用方式:

public class MainTest {
    public static void main(String[] agrs){
        HotDrink coffee = new Coffee();
        HotDrink tea = new Tea();
        coffee.prepareRecipe();
        tea.prepareRecipe();
    }
}

运行结果:


image.png

通过抽象出模板模式,子类复用了超类中固定的部分,不同的子类中只需定义算法细节,就能实现不同的扩展,例如我们如果想加一种奶茶的热饮,只需要继承HotDrink,再实现冲泡奶茶,加珍珠这两步即可。

上一篇下一篇

猜你喜欢

热点阅读