码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-11 14:55:41      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:

 

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

 

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

 

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

 

应用案例:

数组排序算法 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;
}

 

 

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

标签:

原文地址:http://www.cnblogs.com/ant-wjf/p/4638555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!