模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
一 模板方法模式练习-试卷
UML图
测试代码
cpp
#include <iostream>
using namespace std;
class TestPaper
{
public:
void question2(){
cout << "试题2" << endl;
cout << "答案:" << answer2() << endl;
}
void question1(){
cout << "试题1" << endl;
cout << "答案:" << answer1() << endl;
}
virtual string answer1() = 0;
virtual string answer2() = 0;
};
class TestPaperA:public TestPaper
{
public:
virtual string answer1(){
return "a";
}
virtual string answer2(){
return "a";
}
};
class TestPaperB:public TestPaper
{
public:
virtual string answer1(){
return "b";
}
virtual string answer2(){
return "b";
}
};
int main(void)
{
cout << "学生a的试卷:" << endl;
TestPaper *a = new TestPaperA();
a->question1();
a->question2();
cout << "学生b的试卷:" << endl;
TestPaper *b = new TestPaperB();
b->question1();
b->question2();
return 0;
}
二、模板方法模式
UML
代码
cpp
#include <iostream>
using namespace std;
class communication
{
public:
void process(){
read();
write();
}
virtual int read() = 0;
virtual int write() = 0;
};
class uart:public communication
{
public:
int read(){
cout << "读串口" << endl;
return 0;
}
int write(){
cout << "写串口" << endl;
return 0;
}
};
class tcp:public communication
{
public:
int read(){
cout << "读tcp" << endl;
return 0;
}
int write(){
cout << "写tcp" << endl;
return 0;
}
};
class udp:public communication
{
public:
int read(){
cout << "读udp" << endl;
return 0;
}
int write(){
cout << "写udp" << endl;
return 0;
}
};
int main(void)
{
communication *u = new uart();
communication *t = new tcp();
communication *d = new udp();
u->process();
t->process();
d->process();
return 0;
}
运行结果:
读串口
写串口
读tcp
写tcp
读udp
写udp