模板方法模式

来源:互联网 发布:阿里云vps如何购买 编辑:程序博客网 时间:2024/05/16 11:09
[cpp] view plaincopyprint?
  1. /************************************************************************/
  2. /* 模板方法模式 */
  3. /************************************************************************/
  4. /*
  5. 将重复的行为在父类中抽象,具体实现在子类种完成,而行为的调用代码在父类中完成
  6. 利用多态原理,实际的调用的是子类的行为
  7. */
  8. /*这里以A、B两人答同一份试卷为例*/
  9. #include<iostream>
  10. using namespace std;
  11. class TestPaper
  12. {
  13. public:
  14. /*A和B都具有答题的行为,但是具体的行为的表现却不一样*/
  15. virtual void Answer1() = 0;
  16. virtual void Answer2() = 0;
  17. void Question1()
  18. {
  19. cout<<"凤姐是不是女人? A.是 B.不是"<<endl;
  20. Answer1();
  21. }
  22. void Question2()
  23. {
  24. cout<<"如果世界上只剩下凤姐和你,你会取她吗? A.我宁愿自杀 B.为了人类哥从了"<<endl;
  25. Answer2();
  26. }
  27. };
  28. //A的答题试卷
  29. class TestPaperA :public TestPaper
  30. {
  31. public:
  32. void Answer1()
  33. {
  34. cout<<"A"<<endl;
  35. }
  36. void Answer2()
  37. {
  38. cout<<"A"<<endl;
  39. }
  40. };
  41. //B的答题试卷
  42. class TestPaperB : public TestPaper
  43. {
  44. public:
  45. void Answer1()
  46. {
  47. cout<<"B"<<endl;
  48. }
  49. void Answer2()
  50. {
  51. cout<<"B"<<endl;
  52. }
  53. };
  54. void main()
  55. {
  56. cout<<"A的试卷"<<endl;
  57. TestPaper * A = new TestPaperA();
  58. A->Question1();
  59. A->Question2();
  60. cout<<"................................................................................"<<endl;
  61. cout<<"B的试卷"<<endl;
  62. TestPaperB *B = new TestPaperB();
  63. B->Question1();
  64. B->Question2();
  65. }