View和Mediator的交互

因为是View和Mediator的交互,所以我将事件枚举命名为

public enum VMCubeEvent  {
    UpdatePosition,
}

新建CubeView

using UnityEngine;
using strange.extensions.mediation.impl;
using strange.extensions.dispatcher.eventdispatcher.api;
public class CubeView : View {

    [Inject]//使用局部的派发器
    public IEventDispatcher dispatcher { get; set; }
    
    //提供接口
	public void UpdatePosition(Vector3 pos){
		this.transform.position = pos;
	}

    private void OnMouseDown()
    {
        //Cube被点击后,发送命令通知Mediator
        dispatcher.Dispatch(VMCubeEvent.UpdatePosition,Random.Range(1,10));
    }
}

对应的Mediator

using UnityEngine;
using strange.extensions.mediation.impl;
using strange.extensions.dispatcher.eventdispatcher.api;
using strange.extensions.context.api;

public class CubeViewMediator : EventMediator {

	[Inject]//注入View,直接调用View接口交互
	public CubeView cubeView{ get; set;}

	public override void OnRegister ()
	{
	//监听View层发出的命令
        cubeView.dispatcher.AddListener(VMCubeEvent.UpdatePosition, OnUpdatePos);
    }

	public override void OnRemove ()
	{
        cubeView.dispatcher.RemoveListener(VMCubeEvent.UpdatePosition, OnUpdatePos);
    }

    private void OnUpdatePos(IEvent evt) {
        //发送命令去Command层做逻辑计算等
        //evt.data  View传过来的数据
        //当命令有回应时,直接调用View接口传递给View
        //cubeView.UpdatePosition((Vector3)evt.data);
    }
}

总结:View用来和用户交互,感知事件的发生,然后通过局部的dispatcher派发命令通知Mediator层,Mediator事先通过这个局部的dispatcher监听好事件的回调,触发这个回调(处理),处理完成后,通过View引用直接访问提供好的接口更新交互。


首页 我的博客
粤ICP备17103704号