首页 > 代码库 > 【设计模式】模板方法模式
【设计模式】模板方法模式
所谓模板方法模式,就是在在抽象基类中定义一套算法框架,框架内的步骤由各个派生类去实现。模板方法模式的优点在于,具有同样代码的操作提升至抽象基类中,派生类中仅仅实现具有差异性的代码,从而最大程度降低了反复代码的存在。要注意的是,这里的模板方法和C++中的模板函数没有不论什么关系。模板方法模式的UML图例如以下:
以下以一个用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; }
执行结果:
在这个样例中,我写了一个关于自我介绍的类。这里如果自我介绍的内容遵循同一个模板,那么内容中同样的部分是许多的,差异也仅仅在于姓名和年龄的不同。因此,我们把自我介绍的一大段文字提升到基类中,而名字、年龄则由各个派生类去实现。“特异性”凌驾于“不变性”,所以使用了虚函数。派生类中对虚函数的重写很easy,仅仅须要描写叙述跟自己相关的信息就可以。当有其它人须要自我介绍时,仅仅须要继承Introduce抽象基类,返回自己的信息就能够了。模板已经在基类中搭好,剩下的扩充是很灵活的。
參考:
《大话设计模式》第10章。
【设计模式】模板方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。