• 模版方法模式Template Mothod -- 学习HeadFirst设计模式记录


     

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

     

    这个模式主要用来创建一个算法的模版。

     

    好莱坞原则:别调用(打电话)我们,我们会调用(打电话)你;

     

    应用案例:

    数组排序算法 void sort(Object[] a),其中入参对象必须实现compareTo(Object o)方法,即入参对象必须实现Comparable接口。

     

    模式演示 代码:


    #include <iostream>

    /* caffeine:咖啡因, beverage:饮料 */
    class CaffeineBeverage
    {
    public:
        /*算法模版*/
        void PrepareRecipe()
        {
            BoilWater();      // 烧水
            Brew();           // 冲泡
            PourInCup();      // 倒入杯子
            AddCondiments();  // 添加调料
        }
        
        void BoilWater()
        {
            std::cout<<"Boiling water."<<std::endl;
        }
        void PourInCup()
        {
            std::cout<<"Pouring into cup."<<std::endl;
        }
        virtual void Brew() {};    // 虚函数,子类必须实现
        virtual void AddCondiments() {};

        void Hook() {}  // 钩子函数,提供默认实现,子类选择实现
    };

    /* 基于模版方法煮咖啡,只实现虚函数 */
    class Tea : public CaffeineBeverage
    {
    public:
        virtual void Brew()
        {
            std::cout<<"Dripping coffee through filter."<<std::endl;
        }
        virtual void AddCondiments()
        {
            std::cout<<"Adding suger and milk."<<std::endl;
        }
    };
    /* 基于模版方法煮茶,只实现虚函数 */
    class Coffer : public CaffeineBeverage
    {
    public:
        virtual void Brew()
        {
            std::cout<<"Steeping the tea."<<std::endl;
        }
        virtual void AddCondiments()
        {
            std::cout<<"Adding lemon."<<std::endl;
        }
    };


    int main()
    {    
        std::cout<<"Template Method"<<std::endl;

        Coffer coffer;
        coffer.PrepareRecipe();
        Tea tea;
        tea.PrepareRecipe();

        return 0;
    }

     

  • 相关阅读:
    LeetCode 152. 乘积最大子数组 | Python
    LeetCode 31. 下一个排列 | Python
    LeetCode 136. 只出现一次的数字 | Python
    LeetCode 102. 二叉树的层序遍历 | Python
    LeetCode 155. 最小栈 | Python
    LeetCode 69. x 的平方根 | Python
    Python3 高阶函数
    Python3 装饰器
    Python3 递归函数
    Python3 函数
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/4638555.html
Copyright © 2020-2023  润新知