模板方法模式个人理解就是对继承的合理使用。也就是说当子类中出现许多重复和特有的代码段时,我们应该把重复的代码上升到父类中。然后子类就通过继承来获得重复的功能,而在子类中重写或者添加自身特有的方法。就好像我们把模板拿过来,然后就添加自己的内容。
模板方法模式在书中的定义为:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义改算法的某些特定步骤。
下面是对书中代码的实践:
// 模板方法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class TestPaper
{
public:
void question1()
{
cout<<"题目一的答案为:";
cout<<Answer1()<<endl;
}
void question2()
{
cout<<"题目二的答案为:";
cout<<Answer2()<<endl;
}
void question3()
{
cout<<"题目三的答案为:";
cout<<Answer3()<<endl;
}
virtual string Answer1()
{
return "";
}
virtual string Answer2()
{
return "";
}
virtual string Answer3()
{
return "";
}
};
class TestPaper1 : public TestPaper
{
public:
string Answer1()
{
return "a";
}
string Answer2()
{
return "b";
}
string Answer3()
{
return "c";
}
};
class TestPaper2 : public TestPaper
{
public:
string Answer1()
{
return "e";
}
string Answer2()
{
return "f";
}
string Answer3()
{
return "g";
}
};
int _tmain(int argc, _TCHAR* argv[])
{
TestPaper1 student1;
TestPaper2 student2;
cout<<"学生A的试卷:"<<endl;
student1.question1();
student1.question2();
student1.question3();
cout<<"学生B的试卷:"<<endl;
student2.question1();
student2.question2();
student2.question3();
system("pause");
return 0;
}
模板方法模式的使用情况:
当我们需要完成在某一细节层次一致的一个过程或者一系列步骤,但其个别步骤在更详细的层次上的实现可能不同,我们通常就考虑使用模板方法模式来处理。
模板方法模式的特点:
1、通过把不变行为搬到超类,去除子类中的重复代码来体现它的优势。
2、提供一个很好的代码复用平台。
总结:模板方法模式比较好理解,实现起来的思路比较清晰。不过具体的使用还是有待在项目中不断实践,才能体会到什么情况下应该选择什么方法来优化。