模板方法这个名字看着很陌生,其实在游戏中大量地使用了模板方法,因为游戏中存在玩家、NPC和静态物体等不同的对象,使用多态特性能很好地进行区分。
模板方法的定义是:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
举个最简单的玩家和NPC死亡时的逻辑:
流程图如下:
代码如下
// MVC.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class Object
{
public:
Object():m_dead(0)
{
}
void SetDead()
{
cout<<"========================="<<endl;
BeforeDead();
Ondead();
AfterDead();
cout<<"========================="<<endl;
}
virtual void BeforeDead()
{
}
virtual void AfterDead()
{
}
void Ondead()
{
cout<<"Skill End"<<endl;
cout<<"you are dead!"<<endl;
}
bool IsDead()
{
return m_dead;
}
private:
bool m_dead;
};
class Player:public Object
{
public:
virtual void BeforeDead()
{
cout<<"Interrupt trade if you are trading!"<<endl;
}
virtual void AfterDead()
{
cout<<"nothing!"<<endl;
}
};
class NPC:public Object
{
public:
virtual void BeforeDead()
{
cout<<"Call BeforeDead Lua Script!"<<endl;
}
virtual void AfterDead()
{
cout<<"Call AfterDead Lua Script!"<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
auto_ptr<Player> player(new Player());
auto_ptr<NPC> npc(new NPC());
cout<<"Player dead!"<<endl;
player->SetDead();
cout<<"NPC dead!"<<endl;
npc->SetDead();
}
模板方法的优点是将共性在父类中实现,将差异化在不同的子类中实现。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/guxuxin/article/details/47406615