模板方法模式:java
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使子类在不改变算法结构的状况下,从新定义算法中的某些步骤。算法
模板方法模式的结构:框架
这个模式是用来建立一个算法的模板。这个模板将算法定义为一组步骤,其中任何步骤均可以是抽象的,由子类负责实现。不少框架都是采用模板方法模式。spa
示例:星巴兹冲泡咖啡和茶的步骤以下:code
咖啡冲泡法:继承
|
茶冲泡法:ip
|
首先定义一个饮料的抽象类:ci
public abstract class Drink { //模板方法,定义制做饮料的模板过程 final void makeDrink() { boilWater(); //煮水 brew(); //冲泡 pourInCup(); //倒进杯子 if (customerWantsCondiments()) { addCondiments(); //加配料 } } //各类饮料的冲泡方法和加配料方法不一样,定义为抽象方法交给子类实现 abstract void brew(); abstract void addCondiments(); //各类饮料煮水和倒进杯子方法都同样,直接在抽象超类中实现 void boilWater() { System.out.println("Boiling water");} void pourInCup() { System.out.println("Pouring into cup");} //该方法是一个钩子,子类能够覆盖该钩子来实现一些自定义功能 boolean customerWantsCondiments() { return true; } }
而后定义咖啡和茶类:钩子
//茶类 public class Tea extends Drink{ public void brew(){ System.out.println("steeping the tea"); } public void addCondiments(){ System.out.println("adding lemon"); } } //咖啡类 public class Coffee extends Drink{ public void brew(){ System.out.println("dripping coffee through filter");} public void addCondiments(){ System.out.println("adding sugar and milk");} }
要点:table