模板方法模式:定义一个算法框架,将里面的操作步骤推迟到子类中去执行,这样使得子类不用改变框架,只需改变某些操作步骤方法
//test.h
#ifndef _TEST_H_
#define _TEST_H_
#include <iostream>
#include <string>
using namespace std;
class TestPaper
{
public:
TestPaper() {}
virtual ~TestPaper() {}
void question()
{
question1();
question2();
question3();
}
protected:
void question1()
{
cout << "问题1:" << endl;
cout << answer1() << endl << endl;
}
void question2()
{
cout << "问题2:" << endl;
cout << answer2() << endl << endl;
}
void question3()
{
cout << "问题3:" << endl;
cout << answer3() << endl << endl;
}
virtual char answer1()
{
return ' ';
}
virtual char answer2()
{
return ' ';
}
virtual char answer3()
{
return ' ';
}
};
class TestPaperA: public TestPaper
{
public:
void question1()
{
TestPaper::question1();
}
void question2()
{
TestPaper::question2();
}
void question3()
{
TestPaper::question3();
}
char answer1()
{
return 'a';
}
char answer2()
{
return 'b';
}
char answer3()
{
return 'c';
}
};
class TestPaperB: public TestPaper
{
public:
void question1()
{
TestPaper::question1();
}
void question2()
{
TestPaper::question2();
}
void question3()
{
TestPaper::question3();
}
char answer1()
{
return 'c';
}
char answer2()
{
return 'd';
}
char answer3()
{
return 'a';
}
};
#endif
#include <iostream>
#include "test.h"
using namespace std;
int main()
{
TestPaperA a;
TestPaperB b;
cout << "答卷A:" << endl;
a.question();
cout << "答卷B:" << endl;
b.question();
return 0;
}