还以上一节招聘的为例子。
最近有个招聘会,可以带上简历去应聘了。但是,其中有一家公司不接受简历,而是给应聘者发了一张简历表,上面有基本信息、教育背景、工作经历等栏,让应聘者按照要求填写完整。每个人拿到这份表格后,就开始填写。如果用程序实现这个过程,该如何做呢?一种方案就是用模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。我们的例子中,操作就是填写简历这一过程,我们可以在父类中定义操作的算法骨架,而具体的实现由子类完成。
下面给出它的UML图。
[img]http://dl2.iteye.com/upload/attachment/0098/8447/49bd46ed-01c6-3aa5-872c-ed36d96093c0.gif[/img]
其中FillResume() 定义了操作的骨架,依次调用子类实现的函数。相当于每个人填写简历的实际过程。接着给出相应的C++代码。
使用方式如下:
最近有个招聘会,可以带上简历去应聘了。但是,其中有一家公司不接受简历,而是给应聘者发了一张简历表,上面有基本信息、教育背景、工作经历等栏,让应聘者按照要求填写完整。每个人拿到这份表格后,就开始填写。如果用程序实现这个过程,该如何做呢?一种方案就是用模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。我们的例子中,操作就是填写简历这一过程,我们可以在父类中定义操作的算法骨架,而具体的实现由子类完成。
下面给出它的UML图。
[img]http://dl2.iteye.com/upload/attachment/0098/8447/49bd46ed-01c6-3aa5-872c-ed36d96093c0.gif[/img]
其中FillResume() 定义了操作的骨架,依次调用子类实现的函数。相当于每个人填写简历的实际过程。接着给出相应的C++代码。
//简历
class Resume
{
protected: //保护成员
virtual void SetPersonalInfo() {}
virtual void SetEducation() {}
virtual void SetWorkExp() {}
public:
void FillResume()
{
SetPersonalInfo();
SetEducation();
SetWorkExp();
}
};
class ResumeA: public Resume
{
protected:
void SetPersonalInfo() { cout<<"A's PersonalInfo"<<endl; }
void SetEducation() { cout<<"A's Education"<<endl; }
void SetWorkExp() { cout<<"A's Work Experience"<<endl; }
};
class ResumeB: public Resume
{
protected:
void SetPersonalInfo() { cout<<"B's PersonalInfo"<<endl; }
void SetEducation() { cout<<"B's Education"<<endl; }
void SetWorkExp() { cout<<"B's Work Experience"<<endl; }
};
使用方式如下:
int main()
{
Resume *r1;
r1 = new ResumeA();
r1->FillResume();
delete r1;
r1 = new ResumeB();
r1->FillResume();
delete r1;
r1 = NULL;
return 0;
}
本文通过实例解析模板方法模式在简化简历填写过程中的应用,详细介绍了如何使用此设计模式来统一简历填写流程,使得不同类型的简历遵循相同的结构和格式。文中包括UML图展示、C++代码实现以及具体使用方式,旨在提供一种高效、灵活的简历管理解决方案。

被折叠的 条评论
为什么被折叠?



