3)在模板方法模式中,我们需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来让子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式。
代码示例:
/** * 模板方法中的父类,prepare方法定义了算法步骤,不同的饮料需要实现不同的brew,并可以选择是否覆盖food方法 * * @author sky * */ public abstract class Beverage { /** * 准备饮料的过程,烧水,冲泡,倒杯,搭配糕点 */ final public void prepare() { boilWater(); brew(); pourInCup(); food(); } final public void boilWater() { System.out.println("烧水"); } abstract void brew(); final public void pourInCup() { System.out.println("将饮料倒入杯子里"); } public void food() { System.out.println("搭配一点糕点"); } } /** * 咖啡,实现了brew方法 * * @author sky * */ public class Coffee extends Beverage { @Override void brew() { System.out.println("冲咖啡"); } } /** * 茶,实现了brew方法,重写了food方法 * * @author sky * */ public class Tea extends Beverage { @Override public void food() { System.out.println("喝茶不需要搭配糕点"); } @Override void brew() { System.out.println("冲茶"); } } /** * 测试类 * * @author sky * */ public class Test { public static void main(String[] args) { System.out.println("---茶---"); Beverage tea = new Tea(); tea.prepare(); System.out.println("---咖啡---"); Beverage coffee = new Coffee(); coffee.prepare(); } } 输出: ---茶--- 烧水 冲茶 将饮料倒入杯子里 喝茶不需要搭配糕点 ---咖啡--- 烧水 冲咖啡 将饮料倒入杯子里 搭配一点糕点