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;
    }

     

  • 相关阅读:
    51单片机寄存器组的设置(转)
    51单片机堆栈深入剖析(转)
    do{...}while(0)的妙用(转)
    优化C/C++代码的小技巧(转)
    Struts2返回json
    详略。。设计模式1——单例。。。。studying
    [深入理解Android卷一全文-第十章]深入理解MediaScanner
    《python源代码剖析》笔记 Python虚拟机框架
    jQuery Validation让验证变得如此easy(三)
    mysql高可用架构方案之中的一个(keepalived+主主双活)
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/4638555.html
Copyright © 2011-2022 走看看