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