返回

代理模式

代理模式简介

代理模式与观察者模式有些类似,也是老板去指派员工干活,但是并不需要老板去时刻督察,员工在干完活后会主动报告给老板。相对观察者模式来说代理模式更节省CPU性能,再实现多个任务实现时代码更优。

简单代码例子

同样用播放动画来演示,这里分为代理层和实现层,代理层主要任务是给实现层分配任务,不用督察动画是否播放完,每个实现层有自己的计时器,自己为自己的动画计时,播放完成主动报告。

  • 代理层
public class TeachDelegate : MonoBehaviour
{
    DelegateAnimal[] animation = new DelegateAnimal[10];
    void PlayerFinish()
    {
        Debug.Log("return animation");
    }
    void Start()
    {
        for (int i = 0; i < animation.Length; i++)
        {
            animation[i] = new DelegateAnimal(PlayerFinish);
            animation[i].PlayeAnimation();
        }
    }
}
  • 实现层
public delegate void PlayFinish();

public class DelegateAnimal
{
    public Animation player;

    PlayFinish playDelegate;

    float timeCount = 0;

    public DelegateAnimal(PlayFinish tmpDelegate)
    {
        playDelegate = tmpDelegate;
    }
    public void PlayeAnimation()
    {
        player.Play();
    }
    public bool IsFinish()
    {
        return player.isPlaying;
    }
    public void update()
    {
        if (IsFinish())
        {
            timeCount += Time.deltaTime;
            if (timeCount > 0.5f)
            {
                playDelegate();
                Debug.Log("play particle");
            }
        }
    }
}
Licensed under CC BY-NC-SA 4.0
0