1. 程式人生 > >設計模式在遊戲中的應用--模板方法(七)

設計模式在遊戲中的應用--模板方法(七)

一次 cli ces 情況下 sheet skill 對象 cal 模式

模板方法這個名字看著非常陌生,事實上在遊戲中大量地使用了模板方法。由於遊戲中存在玩家、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(); }

技術分享圖片

模板方法的長處是將共性在父類中實現,將差異化在不同的子類中實現。

設計模式在遊戲中的應用--模板方法(七)