zoukankan      html  css  js  c++  java
  • 模版方法模式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;
    }

     

  • 相关阅读:
    用Python打造一款文件搜索工具,所有功能自己定义!
    Python+Excel+Word一秒制作百份合同
    只需6行代码,Python将PPT转为Word!
    老板让我从几百个Excel中查找数据,我用Python一分钟搞定!
    爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别
    SoftEther服务端配置
    SoftEther服务端安装
    nginx学习
    zookeeper安装
    prometheus监控之自动发现
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/4638555.html
Copyright © 2011-2022 走看看