模板方法模式在游戏开发中的应用-新闻详情

模板方法模式在游戏开发中的应用


发布时间:2016-11-30责任编辑:朱明 浏览:1473


一、  模式简介

定义一个操作中的算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤。

 

模板方法模式(Template Method)结构图:

 

    模板方法模式在游戏开发中的应用1.png

 

AbstractClass是一个抽象模板类,在它的内部定义并实现了一个模板方法,它给出了一个顶级逻辑的骨架,而其中逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。当然,在顶级逻辑中也有可能会调用一些具体方法。

 

ConcreteClass是一个具体子类,负责实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应。而每一个ConcreteClass都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。

 

二、在游戏开发中的应用

 

接下来结合我们的《战国跑酷》游戏项目,谈一谈模板方法模式的实际应用。

 

新手引导,是每个游戏都必不可少的功能模块,它在新用户第一次进入游戏时,给予引导,帮助玩家快速上手游戏。进入新手引导后,通常都会打开一个用于引导的界面,在界面中会存在引导点击的高亮区域或是文字说明等内容,当玩家按照引导操作之后,便会关闭当前的引导界面,跳转到下一个新引导界面,从而一步步的进行下去。我们在制作新手引导的过程中,对于每一个步骤,处理的顶层逻辑基本都是一样的,顶层逻辑的骨架如下:

 

Step 1:关闭当前界面;

Step 2 : 打开下一个界面;

Step 3 : 显示下一个界面自身的引导内容;

Step 4 : ...

 

针对上述情况,模板方法模式便可以发挥它的优势,将重复操作放在父类之中,而将特殊的操作步骤延迟到子类实现,从而实现代码的复用。

 

定义抽象新手引导类

public abstract class NoviceGuide

{

     public void GuideOperation()//模板方法

     {

          CloseCurrentView();//通用方法,关闭当前界面

          OpenNextView();//通用方法,打开下一界面

          PrimativeOperation();//抽象方法,显示界面自身内容,在具体子类中实现

     }

 

     public void CloseCurrentView();

     public void OpenNextView();

     public abstract void PrimativeOperation(); 

}

 

定义具体实现子类1

public class NoviceGuideStep1

{

     public override void PrimativeOperation()

     {

          //处理步骤1需要展示的内容

     }

}

 

定义具体实现子类2

public class NoviceGuideStep2

{

     public override void PrimativeOperation()

     {

          //处理步骤2需要展示的内容

     }

}

 

这样一来,重复的代码被提取到父类之中,而我们只需要在具体的子类中添加对应的处理就可以了。模板方法模式提供了一个很好的代码复用方式,我们通过把这些重复的行为搬移到单一的地方,这样就能帮助子类摆脱重复的不变行为。模板方法模式是比较常用的模式,像在.net的类库设计中,通常都会利用模板方法模式提取类库中的公共行为到抽象类中。

 

战国工作室   供稿