空中社区

首页 » 〓〓娱乐地带〓〓 » ┫数码风云┣ » 编程与项目开发 » C++设计模式--模板方法
计算机紧急响应组 - 2008-6-12 10:43:00
模板方法Gof的定义是:在一个方法里定义算法的骨架,将一些步骤延迟到其子类。模板方法使得子类有机会重新定义算法的某些步骤而不改变算法的结构。模板方法实际上是利用多态这种晚绑定机制来将一些执行系列延迟到子类(运行时)。如下图:


其中父类Application中的DoSomething()方法就是一个模板方法。模板方法顾名思义就是定义一个模板或框架,这个框架里调用了其他两个方法Operation1和Operation2,这两个方法是虚方法或者抽象方法以允许子类MyApplication有机会覆盖掉其定义。父类仅仅作一些抽象性的工作,而具体的事情由子类来完成。
计算机紧急响应组 - 2008-6-12 10:43:00
举个实际应用的例子。
交大新生加入社团的流程是:
1:先报名
2:面试
3:录用

在这里,这三个步骤是必不可少的,而且是按顺序来执行的。但是每个社团会根据自己的情况,定制自己的方法来招新生。
比如咋“计算机紧急响应组”,我们的报名方法是网上报名,面试时有技术的新生优先录用,录用后发放工作证。
但其他社团就不一定是这样做,但所有的社团都必需是按照这三步来招收新成员的。

那么我们就必需把这三个步骤定死,不让其他社团更改步骤,但其他社团又可根据自己的情况定制适合自己的招收新成员的方法。那么在这里,我们就用具体的代码来实现一下。

首先我们先设计一个CLeague类,在这个类里有一个Join()函数,这个函数规定了招收新生的步骤,即先报各,后面试,最后录用。在这个数里有三个函数,分别是
virtual void SignUp(){}//报名
virtual void Interviewing(){}//面试
virtual void Employ(){}//录用

然后其他的类都从CLeague派生。
具体代码如下:



class CLeague//管理所有社团的基类
{
public:
CLeague(){}
~CLeague(){}
void Join()
{
  SignUp();
  Interviewing();
  Employ();
}
protected:
private:
virtual void SignUp(){}//报名
virtual void Interviewing(){}//面试
virtual void Employ(){}//录用
};
class CCert : public CLeague//具体的社团类
{
public:
CCert(){}
~CCert(){}
protected:
private:
void SignUp()//报名
{
  cout<<"先从网上报名"<<endl;
}
void Interviewing()//面试
{
  cout<<"有技术的优先录用"<<endl;
}
void Employ()//录用
{
  cout<<"发放响应组工作证"<<endl;
}
};
class COthers : public CLeague//具体的社团类
{
public:
COthers(){}
~COthers(){}
protected:
private:
void SignUp()//报名
{
  cout<<"根据本社团的情况定制的报名方式"<<endl;
}
void Interviewing()//面试
{
  cout<<"根据本社团的情况定制的面试方式"<<endl;
}
void Employ()//录用
{
  cout<<"根据本社团的情况,录用后做些什么我就不知咯"<<endl;
}
};
int main()
{
CCert cert;
cert.Join();
cout<<"--------------------"<<endl;
COthers other;
other.Join();
system("pause");
return 0;
}
yunzhongfeng - 2008-6-19 19:52:00
牛啊,不知道啊
1
查看完整版本: C++设计模式--模板方法