模板方法模式

GOOD:把不变的代码部分都转移到父类中,将可变的代码用virtual留到子类重写。

GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。

可以看出来,模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的。使用模板方法使系统扩展性增强,最小化了变化对系统的影响。这一点,在下面的举例中可以很明显的看出来。


看一个例子:

#include<iostream> #include <vector> #include <string> using namespace std; class AbstractClass { public: void Show() { cout<<"我是"<<GetName()<<endl; } protected: virtual string GetName()=0; }; class Naruto : public AbstractClass { protected: virtual string GetName() { return "火影史上最帅的六代目---一鸣惊人naruto"; } }; class OnePice : public AbstractClass { protected: virtual string GetName() { return "我是无恶不做的大海贼---路飞"; } }; //客户端 int main() { Naruto* man = new Naruto(); man->Show(); OnePice* man2 = new OnePice(); man2->Show(); return 0; }

 

 

你可能感兴趣的:(模板方法模式)