【1】什么是模板方法模式?
又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
【2】模板方法模式代码示例:
代码示例1:
1 #include2 #include 3 using namespace std; 4 5 class TestPaper 6 { 7 public: 8 void question1() 9 {10 cout << "1+1=" << answer1() << endl;11 }12 void question2()13 {14 cout << "1*1=" << answer2() << endl;15 }16 virtual string answer1()17 {18 return "";19 }20 virtual string answer2()21 {22 return "";23 }24 virtual ~TestPaper()25 {26 }27 };28 29 class TestPaperA : public TestPaper30 {31 public:32 string answer1()33 {34 return "2";35 }36 virtual string answer2()37 {38 return "1";39 }40 };41 42 class TestPaperB : public TestPaper43 {44 public:45 string answer1()46 {47 return "3";48 }49 virtual string answer2()50 {51 return "4";52 }53 };54 55 56 int main()57 {58 cout << "A的试卷:" << endl;59 TestPaper *s1 = new TestPaperA();60 s1->question1();61 s1->question2();62 delete s1;63 64 cout << endl;65 cout << "B的试卷:" << endl;66 TestPaper *s2 = new TestPaperB();67 s2->question1();68 s2->question2();69 70 return 0;71 }
代码示例2:
1 #include2 #include 3 #include 4 using namespace std; 5 6 class AbstractClass 7 { 8 public: 9 void Show()10 {11 cout << "我是" << GetName() << endl;12 }13 protected:14 virtual string GetName() = 0;15 };16 17 class Naruto : public AbstractClass18 {19 protected:20 virtual string GetName()21 {22 return "火影史上最帅的六代目---一鸣惊人naruto";23 }24 };25 26 class OnePice : public AbstractClass27 {28 protected:29 virtual string GetName()30 {31 return "我是无恶不做的大海贼---路飞";32 }33 };34 35 //客户端36 int main()37 {38 Naruto* man = new Naruto();39 man->Show();40 41 OnePice* man2 = new OnePice();42 man2->Show();43 44 return 0;45 }
Good Good Study, Day Day Up.
顺序 选择 循环 总结