java设计模式(三)模板模式

  抽象类中公开定义了执行它的方法的方式,子类可以按需求重写方法实现,但调用将以抽象类中定义的方式进行,典型应用如银行办理业务流程、冲泡饮料流程。下面给出简单例子,用沸水冲泡饮料,分为四步:将水煮沸、泡制饮料、将饮料倒入杯中、加入调味料。

1、模板抽象类

  要点:1)抽象类  2)final修饰的模板方法

public abstract class RefreshTemplate {

    public final void refresh() {
        //将水煮沸
        biolWater();
        //炮制饮料
        brew();
        //将饮料倒入杯中
        pourInCup();
        //加入调味料
        addCondiments();

    }

    private void biolWater() {
        System.out.println("将水煮沸");
    }

    protected abstract void brew();

    private void pourInCup() {
        System.out.println("将饮料倒入杯中");
    }

    protected abstract void addCondiments();

}

2、咖啡类,继承模板类,重写冲泡、加调味料方法

public class Coffee extends RefreshTemplate {
    protected void brew() {
        System.out.println("用沸水冲泡咖啡");
    }

    protected void addCondiments() {
        System.out.println("向咖啡中加入牛奶和糖");
    }
}

3、茶类,继承模板类,重写冲泡、加调味料方法

public class Tea extends RefreshTemplate {
    protected void brew() {
        System.out.println("用开水浸泡5分钟");
    }

    protected void addCondiments() {
        System.out.println("加入柠檬");
    }
}

4、测试

public class Model {

    public static void main(String[] args) {
        //RefreshTemplate refresh = new Coffee();
        RefreshTemplate refresh = new Tea();
        refresh.refresh();
    }

}

利用Java的动态绑定(向上转型),调用父类的final模板方法,保证执行按抽象类定义的方式进行。

代码:https://github.com/shaoyesun/jdk_test.git

原文地址:https://www.cnblogs.com/sunjf/p/java_template.html