模板模式C++实现
来源:互联网 发布:linux执行存储过程 编辑:程序博客网 时间:2024/05/22 03:31
设计原则:确保对试卷(父类)的最大复用;将所有重复的代码上升到父类中,而不是让每个子类去重复;
当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们考虑用模板方法模式来处理;
模板模式:定义了一个操作中算法的框架,而将一些步骤延迟到子类;
模板方法使得子类可以不改变一个算法的结构即可重写该算法某些特定的步骤;
模板模式的UML类图:
模板模式优势:把不变形为搬移到父类,去除子类中重复的代码,它提供了一个很好地代码复用平台;
“抄试卷”这一逻辑的模板模式应用:
抽象父类及其子类的定义与实现:testpapaer.h
#pragma once#include <iostream>#include <string>using namespace std;class TestPaper{public:TestPaper(){TestQuestion1();TestQuestion2();TestQuestion3();}void TestQuestion1(){cout << "Question1" << endl;}void TestQuestion2(){cout << "Question2" << endl;}void TestQuestion3(){cout << "Question3" << endl;}void PrintAnswer(){ cout << "answer1 = " << Answer1() << endl; cout << "answer2 = " << Answer2() << endl;cout << "answer3 = " << Answer3() << endl;}//虚方法实现多态,让继承的子类来重写虚方法;//一些抽象行为,放到子类中去实现//模板方法,给出了逻辑的框架,而逻辑的组成是一些相应的抽象操作,它们推迟到子类中去实现virtual string Answer1()=0; virtual string Answer2()=0;virtual string Answer3()=0;};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 "b";}string Answer2(){return "a";}string Answer3(){return "d";}};
客户端代码:
#include "testpaper.h"int main(){cout << "TestPaper1:" << endl;TestPaper *t1=new TestPaper1();//将父类对象的指针指向子类的实现,利用了多态,实现了代码的复用t1->Answer1(); t1->Answer2();t1->Answer3();t1->PrintAnswer();cout << "TestPaper2:" << endl;TestPaper *t2=new TestPaper2();t2->Answer1(); t2->Answer2();t2->Answer3();t2->PrintAnswer();delete t1;delete t2;return 0;}代码输出为:
0 0
- 模板模式 (C语言实现)
- C语言实现《设计模式之禅》之模板模式
- (C++)用模板或宏实现单例模式
- (C++)用模板或宏实现单例模式
- 【C++】单例模式的一种简单实现的模板
- C++-模板模式
- 模板实现策略模式
- 模板模式C++实现
- 【C++】Chapter7:模板方法模式
- Objective C--模板方法模式
- Objective C 模板方法模式
- Objective C--模板方法模式
- C语言设计模式:模板模式
- 设计模式_模板方法模式(C++)
- 模板方法模式实现探讨
- 模板方法模式实现探讨
- 模板方法模式实现探讨
- 模板方法模式实现探讨
- php foreach用法和实例
- 第二章 知识导图(待完善)
- think it over
- 二叉树遍历算法的实现(先序、中序、后序)
- python中的lambda表达
- 模板模式C++实现
- HDU 3832 Earth Hour
- 互联网缔造全球脑时代
- 浏览器引擎
- 实得分和电视剧独守空房健康副驾驶的肯德基的上课开始觉得见识到
- iOS数据存储之--NSUserDefaults
- 淠河畔的桃花
- 见证了朋友的婚礼 感慨很多 觉得人家幸福的同时 也觉得自己这样也挺好
- Ural 1017 Staircases(DP)