代理模式简介
代理模式与观察者模式有些类似,也是老板去指派员工干活,但是并不需要老板去时刻督察,员工在干完活后会主动报告给老板。相对观察者模式来说代理模式更节省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");
}
}
}
}