设计模式-模板方法模式

  1. 定义
    在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

  2. 例子
    java集合框架中的AbstractCollection

  3. 代码实例

    /**
     * 场景:泡茶与泡咖啡流程大致相同,只有原料不同,如何抽象二者的算法,实现代码复用
     */
    
    /**
     * 饮料模板
     */
    abstract class Drink {
        // 准备饮料,算法流程
        final void prepare() {
            boilWater();
            brew();
            pourInCup();
            addSomething();
        }
        
        final void boilWater() {
            System.out.println("烧水");
        }
        // 加入原料,抽奖方法,必须由子类实现
        abstract void brew();
    
        final void pourInCup() {
            System.out.println("倒进杯子");
        }
        // 加入其他调料,钩子,提供默认实现
        void addSomething() {
            System.out.println("什么都不加");
        }
    }
    
    class Tea extends Drink {
    
        @Override
        void brew() {
            System.out.println("倒入茶叶");
        }
    }
    
    class Coffee extends Drink {
    
        @Override
        void brew() {
            System.out.println("倒入咖啡");
        }
    
        // 使用钩子,hook
        @Override
        public void addSomething() {
            System.out.println("加糖");
        }
    }
    
    // 测试
    class DrinkTest {
        public static void main(String[] args) {
            Tea tea = new Tea();
            tea.prepare();
    
            Coffee coffee = new Coffee();
            coffee.prepare();
        }
    
    }
    
posted @ 2019-08-14 15:50  bosslv  阅读(101)  评论(0编辑  收藏  举报