游戏中的设计模式六:模板模式
发表于2018-03-26
上一篇给大家介绍了策略模式,本篇文章我们就来说说设计模式中的模板模式,有的地方也叫模板方法模式。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。
案例结构图

武器倚天剑和屠龙刀都继承自IWeapon,其中PlaySkillEffect和PlayStartSound方法是模板方法。
子类在这两个方法中一些实现方式不一样,它们各自的特定步骤放在子类中具体实现。
代码实现
创建抽象类(模板)
using UnityEngine; using System.Collections; public abstract class IWeapon { public void Attack() { PlaySkillEffect(); PlayStartSound(); PlayEndSound(); } public abstract void PlaySkillEffect(); public abstract void PlayStartSound(); public void PlayEndSound() { Debug.Log("攻击敌人音效"); } }
创建扩展模板的实体类
屠龙刀
using UnityEngine; using System.Collections; public class TLDWeapon : IWeapon { public override void PlaySkillEffect() { Debug.Log("播放技能特效"); } public override void PlayStartSound() { Debug.Log("播放屠龙刀开始音效"); } }
倚天剑
using UnityEngine; using System.Collections; public class YTJWeapon : IWeapon { public override void PlaySkillEffect() { Debug.Log("播放倚天剑技能特效"); } public override void PlayStartSound() { Debug.Log("播放倚天剑开始音效"); } }
测试
using UnityEngine; using System.Collections; public class Main : MonoBehaviour { private void Start() { IWeapon weapon = new YTJWeapon(); weapon.Attack(); weapon = new TLDWeapon(); weapon.Attack(); } }
验证输出

模式优点
1. 具体的细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构
2. 代码的复用的基本技术
3. 存在一种反向的控制结构,通过一个父类调用子类的操作,通过子类对父类进行扩展新的行为,符合“开闭原则”
模式缺点
每个不同的对象实现都需要定义一个子类,将导致类的个数庞大
如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引