游戏中的设计模式六(模板模式)

博客地址:blog.liujunliang.com.cn


写在前面

游戏中的各个武器一套攻击动作有固定的步骤,但是每个步骤根据武器对象的不同,而细节的实现不同

此时使用模板方法定义一个操作中的方式/算法的骨架,意思就是说在父类里定义一个完成该事情的总步骤

每个步骤的具体实现,由子类完成实现,不同子类的实现方式/算法不尽相同

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

案例结构图



武器倚天剑和屠龙刀都继承自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、存在一种反向的控制结构,通过一个父类调用子类的操作,通过子类对父类进行扩展新的行为,符合“开闭原则”

模式缺点

每个不同的对象实现都需要定义一个子类,将导致类的个数庞大


博客地址:blog.liujunliang.com.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值