代码改变世界

设计模式(7)--模板模式

2016-11-04 00:08  sylar_liang  阅读(154)  评论(0编辑  收藏  举报
//7.模板模式
//ver1
//考试试卷类
class TestPaper
{
public:
	void TestQuestion1(){}
	void TestQuestion2(){}

	virtual string Answer1()
	{
		return "";
	}
	virtual string Answer2()
	{
		return "";
	}
};

class TestPaperA : public TestPaper
{
public:
	void TestQuestion1()
	{
		TestPaper::TestQuestion1();
		//A回答1
		Answer1();
	}
	void TestQuestion2()
	{
		TestPaper::TestQuestion2();
		//A回答2
		Answer2();
	}

	string Answer1()
	{
		return "A";
	}
	string Answer2()
	{
		return "B";
	}
};
class TestPaperB : public TestPaper
{
public:
	void TestQuestion1()
	{
		TestPaper::TestQuestion1();
		//B回答1
		Answer1();
	}
	void TestQuestion2()
	{
		TestPaper::TestQuestion2();
		//B回答2
		Answer2();
	}
	string Answer1()
	{
		return "C";
	}
	string Answer2()
	{
		return "D";
	}
};

void main1()
{
	TestPaper * pstuA = new TestPaperA();
	pstuA->TestQuestion1();
	pstuA->TestQuestion2();

	TestPaper * pstuB = new TestPaperB();
	pstuB->TestQuestion1();
	pstuB->TestQuestion2();
}

//模板模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
//模板模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

//模板模式通过把不变行为搬到超类,去除子类中的重复代码来体现它的优势。