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

【设计模式】模板方法模式

时间:2014-11-09 13:54:14      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   os   使用   sp   div   

所谓模板方法模式,就是在在抽象基类中定义一套算法框架,框架内的步骤由各个派生类去实现。模板方法模式的优点在于,具有同样代码的操作提升至抽象基类中,派生类中仅仅实现具有差异性的代码,从而最大程度降低了反复代码的存在。要注意的是,这里的模板方法和C++中的模板函数没有不论什么关系。模板方法模式的UML图例如以下:

bubuko.com,布布扣


以下以一个用C++描写的简单演示样例来说明模板方法模式的机制。

#include <iostream>
#include <string>
 
using namespace std;
 
class Introduce {
public:
    // 操作框架
    void speak()
    {
        cout << "Hello everyone! My name is " << name() << ", I'm " << age() << " years old.\n";
    }
 
protected:
    // 依据不同的实例,由派生类进行重写
    virtual string name() = 0;
    virtual int age() = 0;
};
 
class IntroduceFoo : public Introduce {
 
    virtual string name()
    {
        return string("Foo");
    }
 
    virtual int age()
    {
        return 18;
    }
};
 
class IntroduceBar : public Introduce {
 
    virtual string name()
    {
        return string("Bar");
    }
 
    virtual int age()
    {
        return 22;
    }
};
 
int main()
{
    Introduce *foo = new IntroduceFoo();
    Introduce *bar = new IntroduceBar();
 
    foo->speak();
    bar->speak();
 
    // 别忘了删除指针
    delete foo;
    delete bar;
 
    system("pause");
    return 0;
}

执行结果:

bubuko.com,布布扣

在这个样例中,我写了一个关于自我介绍的类。这里如果自我介绍的内容遵循同一个模板,那么内容中同样的部分是许多的,差异也仅仅在于姓名和年龄的不同。因此,我们把自我介绍的一大段文字提升到基类中,而名字、年龄则由各个派生类去实现。“特异性”凌驾于“不变性”,所以使用了虚函数。派生类中对虚函数的重写很easy,仅仅须要描写叙述跟自己相关的信息就可以。当有其它人须要自我介绍时,仅仅须要继承Introduce抽象基类,返回自己的信息就能够了。模板已经在基类中搭好,剩下的扩充是很灵活的。

參考:

《大话设计模式》第10章。

【设计模式】模板方法模式

标签:style   blog   http   io   ar   os   使用   sp   div   

原文地址:http://www.cnblogs.com/lcchuguo/p/4084947.html

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