模板方法模式
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
类图如下:
这里以煮咖啡和茶的代码作为示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| public abstract class Beverage { final void prepareRecipe(){ boliWater(); brew(); pourInCup(); addCondiments(); } protected abstract void addCondiments(); private void pourInCup() { log.info("Pouring into cup"); } protected abstract void brew(); private void boliWater() { log.info("boiling water..."); } } public class Coffee extends Beverage { @Override protected void addCondiments() { log.info("Adding Sugar and Milk..."); } @Override protected void brew() { log.info("Dripping Coffe through filter"); } } public class Tea extends Beverage { @Override protected void addCondiments() { log.info("Adding Lemon..."); } @Override protected void brew() { log.info("Steeping the tea..."); } }
|
prepareRecipe方法就是我们的模板方法,为什么?
因为:
- 他是一个方法
- 它用作一个算法的模板,在这个例子中,算法是用来制作饮料的
模板方法定义了一个算法的步骤,并允许子类为一个或者多个步骤提供实现